二叉树 的建立及遍历 过程
我知道二叉树有先序遍历,中序遍历,后续遍历等等,不过这里说的的是输入一些点(11,LL) (7,LLL) (8,R) (5,) (4,L) (13,RL) (2,LLR) (1,RRR) (4,RR) ( );对这些点进行构建出对应的二叉数,并对其进行层次遍历。过程为:
1. 定义结构体变量(表示有关结点及特征)
2. 函数--申请结点
3. 函数---增加新结点
4. 对数据处理,进入输入过程(建树过程)
5. 对数的层次遍历,利用的是宽度优先搜索(队列)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h># define maxn 100typedef 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;}
转载于:https://www.cnblogs.com/java0721/archive/2011/08/22/2602945.html
二叉树 的建立及遍历 过程相关推荐
- 小朋友学数据结构(3):二叉树的建立和遍历
小朋友学数据结构(3):二叉树的建立和遍历 一.基本概念 BinaryTree.png 二叉树:每个结点的子结点个数不大于2的树,叫做二叉树. 根结点:最顶部的那个结点叫做根结点,根结点是所有子结点的 ...
- C语言二叉树实验报告流程图,二叉树的建立与遍历实验报告(c语言编写,附源代码).doc...
二叉树的建立与遍历实验报告(c语言编写,附源代码).doc 第 1 页,共 9 页二叉树的建立与遍历实验报告级 班 年 月 日 姓名 学号_ 1实验题目建立一棵二叉树,并对其进行遍历(先序.中序.后序 ...
- 数据结构——二叉树的建立与遍历算法(实验报告)
实验名称:二叉树的建立与遍历算法 指导教师: 实验日期:2022年月日 实验地点: 成绩: 实验目的: 1.掌握二叉树的定义. 2.二叉树的链式存储结构及在链式存储结构中三种遍历(前 ...
- 二叉树的建立和遍历算法 - 数据结构和算法47
二叉树的建立和遍历算法 让编程改变世界 Change the world by program 有童鞋会说,我们上节课研究这么多遍历的方法干啥呢?聪明的鱼油们怎么看?! 对于二叉树,思路方面我们已 ...
- 二叉树的遍历实验报告C语言,二叉树的建立与遍历实验报告(c语言编写,附源代码)...
程序用VC编写,实现建立一棵二叉树的功能,并对其进行遍历(先序.中序.后序),并且打印输出遍历结果. 二叉树的建立与遍历实验报告 级 班 年 月 日 姓名 学号_ 1.实验题目 建立一棵二叉树,并对其 ...
- 二叉树的建立和遍历的各种问题
链表声明: //基本结构声明 #include<iostream> #include<queue> #include<stack> #include<cstd ...
- 二叉树的建立与遍历(先中后层序)
在做一些算法题时,我会经常用到VS2017去测试,每次去找一个合适的二叉树觉得很麻烦,今天就自己写了一个放在博客上,下次就直接复制了 包含二叉树的建立,以及二叉树的前序遍历.中序遍历.后序遍历和层序遍 ...
- 二叉树的建立与遍历(数据结构)
之前上数据结构时,只是上课听听,没咋在课下实现,现在大二都快结束了,经过几波的ACM竞赛,感觉数据结构太重要了,带着兴趣和欲望重新学一下数据结构中的基础操作 我用的是先序次序输入二叉树中节点建立的二叉 ...
- 关于二叉树的建立和遍历易错问题
```c #define _CRT_SECURE_NO_DEPRECATE //二叉树的建立 #include<stdio.h> #include<stdlib.h> type ...
最新文章
- python codecs模块
- SQL Server 2005/2008 图形界面(SQL Server Management Studio Express)
- Nginx 提示host not found in upstream 错误解决方法
- Google正式收购百度
- ORA-25153: Temporary Tablespace is Empty
- Errors occurred during the build
- VS一直停留在“正在还原nuget程序包”
- 【Java数据结构与算法】第三章 双向链表和约瑟夫问题
- 手动编译包含两个import自写类的java类。
- win10中VM15内centos7的安装
- 适合英语学习的100部电影
- JDY-19蓝牙模块介绍及主、从机调试演示
- 小米路由器青春版 SSH密码根据SN破解
- echarts折线图鼠标悬浮竖线_设置Echarts鼠标悬浮样式
- redis击穿、redis雪崩、redis穿透
- html创建站点文件夹,构建及访问Web站点
- 常见对称加密、解密、破解
- Tensorflow slim库
- electron项目打包报错
- oracle12c rac重启,Oracle12.2 RAC其中一个节点重启