二叉树 的建立及遍历 过程
2011-08-22 08:54
393 查看
我知道二叉树有先序遍历,中序遍历,后续遍历等等,不过这里说的的是输入一些点(11,LL) (7,LLL) (8,R) (5,) (4,L) (13,RL) (2,LLR) (1,RRR) (4,RR) ( );对这些点进行构建出对应的二叉数,并对其进行层次遍历。过程为:
1. 定义结构体变量(表示有关结点及特征)
2. 函数--申请结点
3. 函数---增加新结点
4. 对数据处理,进入输入过程(建树过程)
5. 对数的层次遍历,利用的是宽度优先搜索(队列
)
1. 定义结构体变量(表示有关结点及特征)
2. 函数--申请结点
3. 函数---增加新结点
4. 对数据处理,进入输入过程(建树过程)
5. 对数的层次遍历,利用的是宽度优先搜索(队列
)
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> # define maxn 100 typedef struct Tnode { int have_value; //记录该结点是否被赋值 int v; //记录结点值 struct Tnode *left,*right; //指指向左右结点的指针 }Node; Node* root; //二叉树的根结点 char s[maxn+10]; //保存读入的结点,要足够大哦 int n=0,ans[maxn]; //结点总数和输出序列 Node* newnode() //建立新的结点 { Node* u = (Node*)malloc(sizeof(Node)); //定义一Node指针,并指向申请的动态内存 if(u != NULL) //若申请成功 { u->have_value = 0; //新结点的初始化 u->left = u->right = NULL; //指针的初始化操作,很重要 } return u; //返回指向该结点的指针 } int failed; //记录输入是否正确 void addnode(int v,char *s) //对树的完善工作 { int i; int n = strlen(s); Node * u = root; //从根开始走 for(i=0;i<n;i++) { if(s[i] == 'L') { if(u->left == NULL) //结点不存在吗 u->left = newnode(); //不存在就建立新的结点 u = u->left; //向左延伸 } else if(s[i] == 'R') { if(u->right == NULL) u->right = newnode(); u = u->right; } } if(u->have_value) //该结点是否被赋值过 failed = 1; //输入有误 else { u->v = v; //该结点的值赋给该结点 u->have_value = 1; //宣布此结点已被赋值(标记作用) } } int read_input() //对各结点读入 { failed = 0; //刚开始显然读入无误 root = newnode(); for( ; ; ) { if(scanf("%s",s)!=1) return 0; //系统故障导致输入结束 if(!strcmp(s,"()"))break; //读到结束标志,退出循环 int v; scanf(&s[1],"%d",&v); //读入结点值 addnode(v,strchr(s,',')+1); //查逗号,插结点,示具体情况而定 } return (1); } int bfs() //宽度优先搜索,对二叉树遍历 { int front=0,rear=1; Node* q[maxn]; q[0] = root; while(front <rear) { Node* u=q[front++]; if(!u->have_value) return 0; //存在结点,但未赋值,输入有误..... ans[n++] = u->v; if(u->left != NULL)q[rear++] = u->left; if(u->right != NULL)q[rear++] = u->right; } return 1; } int main() { int i; read_input(); bfs(); for(i=0;i<n;i++) { if(i)printf(" "); printf("%d",ans[i]); } printf("\n"); return 0; }
相关文章推荐
- 二叉树 的建立及遍历 过程
- C实现二叉树的建立和遍历
- 二叉树的建立,前中后序遍历的递归版本和非递归版本,层序遍历
- 数据结构实验之二叉树的建立与遍历
- 二叉树的建立于遍历 基础
- 二叉树基本操作的递归实现(二叉树建立,先序,中序,后序,深度的递归遍历。广度优先,高度优先的非递归遍历)
- c++ 二叉树 的递归建立和递归遍历
- SDUT 2136、2137 二叉树的建立与各种遍历
- 二叉树建立和遍历
- 【数据结构基础】二叉树的建立和递归遍历
- 二叉树的建立及遍历(先序遍历、中序遍历、后续遍历、层次遍历)
- 二叉树的建立、遍历、叶子节点计数、深度计算
- 二叉树的建立与遍历
- C语言 数据结构之二叉树 数据结构实验之二叉树的建立与遍历
- 二叉树的 建立 遍历
- 二叉树的建立与遍历(递推)
- 一种二叉树的建立和遍历实现
- 数据结构之二叉树(遍历、建立、深度)
- 二叉树的建立、遍历的简单代码
- hdoj 1710 Binary Tree Traversals(二叉树的建立及遍历)