非二叉树的创建与遍历
来源:互联网 发布:苹果电脑软件如何更新 编辑:程序博客网 时间:2024/05/17 18:24
装载请注明来源chengyaogen.blog.chinaunix.net
二叉树的创建和遍历网上资料很多,非二叉树的创建和遍历很少有人研究,今天研究了非二叉树创建和遍历。
先来看看我们的小树吧:
怎么创建,怎么遍历,一个字晕!
总有解决问题的办法的,提供一种思路:
1(2(5,6),3(7,8),4(9))
1是根节点,2是根的第一个孩子,3,4是2的兄弟结点
同理2的第一个孩子结点是5,6是5的兄弟结点
最后就变成了下面图形:
我们把1(2(5,6),3(7,8),4(9))作为输入,然后构建上面的图:
- #include <stdio.h>
- #include <stdlib.h>
- #define MAX 3
- //树的数据结构设计
- typedef struct _tree_
- {
- int data;
- struct _tree_ *fchild;//第一个孩子结点
- struct _tree_ *schild;//兄弟结点
- }Tree;
- //分配一个树结点
- Tree *space_tnode(char ch)
- {
- Tree *cureent;
-
- cureent = (Tree *)malloc(sizeof(Tree));
- cureent->data = ch - '0';
- cureent->fchild = cureent->schild = NULL;
- return cureent;
- }
- //创建树
- Tree *create_tree(char *str)
- {
- int level = 0;//层次,我们知道上面的树可以看成三层
-
- Tree *L[MAX],*current;//L[0]指向第一层,L[1]第二层,依次类推
- if(*str >= '0' && *str <= '9' && *(str + 1) == '(')
- {
- L[0] = space_tnode(*str);
-
- }else{
- printf("format error!\n");
- return NULL;
- }
- while(*str)
- {
- switch(*str)
- {
- //进入一层
- case '(':
- str ++;
- current = space_tnode(*str);
- //链接第一个孩子结点
- L[level]->fchild = current;
- L[++level] = current;
- break;
- //链接兄弟结点
- case ',':
- str ++;
- current = space_tnode(*str);
- L[level]->schild = current;
- L[level] = current;
- break;
-
- //退出一层
- case ')':
- level --;
- break;
- }
- str ++;
- }
-
- return L[0];
- }
- //以下是队列的设计和实现
- typedef Tree *DataType;
- typedef struct node
- {
- DataType data;
- struct node *next;
- }ListNode;
- typedef struct
- {
- struct node *front;
- struct node *rear;
-
- }ListQueue;
- ListQueue *create_empty_queue()
- {
- ListNode *temp;
- ListQueue *qhead;
- temp = (ListNode *)malloc(sizeof(ListNode));
- temp->next = NULL;
- qhead = (ListQueue *)malloc(sizeof(ListQueue));
- qhead->front = qhead->rear = temp;
- return qhead;
- }
- int is_empty_queue(ListQueue *p)
- {
- if(p->front == p->rear)
- return 1;
- else
- return 0;
- }
- int enter_queue(ListQueue *p,DataType data)
- {
- ListNode *temp;
- temp = (ListNode *)malloc(sizeof(ListNode));
- temp->data = data;
- temp->next = NULL;
- p->rear->next = temp;
- p->rear = temp;
- return 0;
- }
- DataType delete_queue(ListQueue *p)
- {
- ListNode *temp;
- //保存第一个结点
- temp = p->front;
- //移动指针
- p->front = temp->next;
- //删除第一个结点
- free(temp);
- temp = NULL;
- return p->front->data;
- }
- int main()
- {
- Tree *TreeHead,*current;
- char buf[100];
- ListQueue *QueueHead;
- QueueHead = create_empty_queue();
-
- scanf("%s",buf);
- TreeHead = create_tree(buf);
-
- //遍历的思想是树的按层次遍历
- //头结点先入队
- enter_queue(QueueHead,TreeHead);
- while(!is_empty_queue(QueueHead))
- {
- //头结点出队
- current = delete_queue(QueueHead);
- printf("%d ",current->data);
- //孩子结点入队
- if((current = current->fchild) != NULL)
- {
- enter_queue(QueueHead,current);
- //孩子的所有兄弟结点入队
- while((current = current->schild) !=NULL)
- {
- enter_queue(QueueHead,current);
- }
- }
- }
- printf("\n");
- return 0;
- }
树在遍历的过程,用队列使用层次进行遍历的,先将根节点入队,然后出队,然后把其第一个孩子和第一个孩子的所有兄弟接点入队,依次类推...
0
上一篇:树与二叉树遍历演示
下一篇:约瑟夫问题
相关热门文章
- HTML5实现3D和2D可视化QuadTre...
- WPF Grid遍历Label
- leetcode 求二叉树中和最大的...
- Java 8 Stream API详解
- Linux MD/RAID bitmap实现(3) ...
- A sample .exrc file for vi e...
- IBM System p5 服务器 HACMP ...
- 游标的特征
- busybox的httpd使用CGI脚本(Bu...
- Solaris PowerTOP 1.0 发布
给主人留下些什么吧!~~
评论热议
0 0
- 非二叉树的创建与遍历
- 二叉树的创建遍历-递归与非递归
- 二叉树的创建与前中后序遍历递归非递归
- 二叉树的创建和递归与非递归遍历
- 二叉树的创建|非递归遍历
- 数据结构与算法学习记录--二叉树的创建,递归遍历,非递归遍历的实现
- 二叉树的常用操作(创建、先中后序递归与非递归遍历、层序遍历)
- 二叉树的创建--(3)遍历二叉树(递归与非递归、Level)
- 二叉树的创建,递归遍历,非递归遍历
- 二叉树的创建,递归遍历以及非递归遍历
- 【C++】二叉树的创建方法及其遍历的递归与非递归方法总结
- 【数据结构】二叉树的递归与非递归创建和遍历
- 二叉树的递归遍历与非递归遍历
- 二叉树的递归遍历与非递归遍历
- 二叉树的递归遍历与非递归遍历
- 二叉树的递归遍历与非递归遍历
- 二叉树的递归遍历与非递归遍历
- 二叉树的递归遍历与非递归遍历
- 盘点Linux内核源码中使用宏定义的若干技巧(2)
- (整理)关于C语言中的输入和输出函数的一些运用
- iOS开发之深入理解GCD
- 一个比冒泡,选择效率快的排序方法(折半排序)
- 树与二叉树遍历演示
- 非二叉树的创建与遍历
- 博客迁移到了Github
- 约瑟夫问题
- 球钟问题
- 错误:程序中有游离的……
- 这样学习C语言最有效
- 132 javascript 理解立即执行函数
- linux 多点触控协议
- 算法导论(八)--线性时间排序
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
池州到九华山
合肥到池州高铁
池州邮政编码
池州到南京高铁
池州人事考试培训网
池州网上房地产
池州市公共资源
池州属于哪个省
池州人网论坛
池州国际马拉松
池州长江大桥
池州房产网新楼盘
池州人才网招聘信息
池州人论坛民生
池州杏花村旅游
池州风景区有哪些
池州九华山机场
池州近期招聘信息
池州地区医院
马鞍山到池州的高铁
池州火车站到九华山
池州房价均价
池州网站制作
池州房地产交易网
池州教育体育网
安庆到池州多少钱
池州纵横房产二手房源
池州义乌小商品批发市场
池州到九华山怎么坐车
池州周边旅游景点
池忆
池晟
池晟和李宝英婚纱照
池本
池杉
池杉价格
池欢
池欢在上墨少轻轻亲
池沼
池沼的读音
池沼的拼音