我知道二叉树有先序遍历,中序遍历,后续遍历等等,不过这里说的的是输入一些点(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

二叉树 的建立及遍历 过程相关推荐

  1. 小朋友学数据结构(3):二叉树的建立和遍历

    小朋友学数据结构(3):二叉树的建立和遍历 一.基本概念 BinaryTree.png 二叉树:每个结点的子结点个数不大于2的树,叫做二叉树. 根结点:最顶部的那个结点叫做根结点,根结点是所有子结点的 ...

  2. C语言二叉树实验报告流程图,二叉树的建立与遍历实验报告(c语言编写,附源代码).doc...

    二叉树的建立与遍历实验报告(c语言编写,附源代码).doc 第 1 页,共 9 页二叉树的建立与遍历实验报告级 班 年 月 日 姓名 学号_ 1实验题目建立一棵二叉树,并对其进行遍历(先序.中序.后序 ...

  3. 数据结构——二叉树的建立与遍历算法(实验报告)

    实验名称:二叉树的建立与遍历算法          指导教师: 实验日期:2022年月日 实验地点: 成绩: 实验目的: 1.掌握二叉树的定义. 2.二叉树的链式存储结构及在链式存储结构中三种遍历(前 ...

  4. 二叉树的建立和遍历算法 - 数据结构和算法47

    二叉树的建立和遍历算法 让编程改变世界 Change the world by program   有童鞋会说,我们上节课研究这么多遍历的方法干啥呢?聪明的鱼油们怎么看?! 对于二叉树,思路方面我们已 ...

  5. 二叉树的遍历实验报告C语言,二叉树的建立与遍历实验报告(c语言编写,附源代码)...

    程序用VC编写,实现建立一棵二叉树的功能,并对其进行遍历(先序.中序.后序),并且打印输出遍历结果. 二叉树的建立与遍历实验报告 级 班 年 月 日 姓名 学号_ 1.实验题目 建立一棵二叉树,并对其 ...

  6. 二叉树的建立和遍历的各种问题

    链表声明: //基本结构声明 #include<iostream> #include<queue> #include<stack> #include<cstd ...

  7. 二叉树的建立与遍历(先中后层序)

    在做一些算法题时,我会经常用到VS2017去测试,每次去找一个合适的二叉树觉得很麻烦,今天就自己写了一个放在博客上,下次就直接复制了 包含二叉树的建立,以及二叉树的前序遍历.中序遍历.后序遍历和层序遍 ...

  8. 二叉树的建立与遍历(数据结构)

    之前上数据结构时,只是上课听听,没咋在课下实现,现在大二都快结束了,经过几波的ACM竞赛,感觉数据结构太重要了,带着兴趣和欲望重新学一下数据结构中的基础操作 我用的是先序次序输入二叉树中节点建立的二叉 ...

  9. 关于二叉树的建立和遍历易错问题

    ```c #define _CRT_SECURE_NO_DEPRECATE //二叉树的建立 #include<stdio.h> #include<stdlib.h> type ...

最新文章

  1. python codecs模块
  2. SQL Server 2005/2008 图形界面(SQL Server Management Studio Express)
  3. Nginx 提示host not found in upstream 错误解决方法
  4. Google正式收购百度
  5. ORA-25153: Temporary Tablespace is Empty
  6. Errors occurred during the build
  7. VS一直停留在“正在还原nuget程序包”
  8. 【Java数据结构与算法】第三章 双向链表和约瑟夫问题
  9. 手动编译包含两个import自写类的java类。
  10. win10中VM15内centos7的安装
  11. 适合英语学习的100部电影
  12. JDY-19蓝牙模块介绍及主、从机调试演示
  13. 小米路由器青春版 SSH密码根据SN破解
  14. echarts折线图鼠标悬浮竖线_设置Echarts鼠标悬浮样式
  15. redis击穿、redis雪崩、redis穿透
  16. html创建站点文件夹,构建及访问Web站点
  17. 常见对称加密、解密、破解
  18. Tensorflow slim库
  19. electron项目打包报错
  20. oracle12c rac重启,Oracle12.2 RAC其中一个节点重启

热门文章

  1. 俗话说开店容易,守店难,这句话是错的,百分之一万是错的,守店怎么会难?
  2. 在28岁这一年,我也成为了一名创业狗
  3. 现在人真的很奇怪,看见有钱人点头哈腰
  4. 5G的基站覆盖范围300米,今后边远地区的手机通话怎样保证?
  5. Delphi 程序开发范例宝典(第2版)高清PDF下载 附光盘
  6. javascript 事件冒泡和事件代理
  7. HashMap keyset()方法
  8. 标准C程序设计七---120
  9. Python 爬虫实战2 百度贴吧帖子
  10. 2017年5月24日 HTML 基础知识(二)