首页 > 编程知识 正文

中序遍历二叉树,二叉树的先序,中序,后序遍历

时间:2023-05-05 20:46:34 阅读:154828 作者:3919

数据结构——二叉树的先序、中序、后序三种扫描1、图形表示: (1)先序扫描;2 )中序扫描;3 )后序扫描;4 )分层扫描;5 )口诀2、码表示:

一.图标展示: (1)顺序遍历

顺序扫描可以想象一个小矮人以一棵二叉树的根节点为起点,沿着二叉树的外缘,逆时针绕一圈回到根节点。 在路上遇到的要素的顺序,首先是依次扫描的结果

依次扫描的结果是A B D H I E J C F K G

动画演示:

请记住,小人沿着外围走一圈(直到回到根节点),多次看动图就能理解

2 )中顺序扫描中的中顺序扫描是中顺序扫描的结果,其中二叉树的节点在垂直方向上投影(可以理解为每个节点从最左边垂直地落到地面上),并且从左到右计数

中扫描的结果是H D I B E J A F K C G

查看动画:

请记住,中顺遍历是指从最左侧将每个节点垂直投影在同一条直线上,然后从左向右读取值。 多次看动向就能理解了

)3)后面的遍历)后面的遍历就像割葡萄一样,我们把葡萄串一串一串地切下来。

还记得像我之前说的,按顺序遍历环绕路线吗? (不记得向上看理解了)

绕树一圈,发现一把剪刀就能剪的葡萄(必须是一粒葡萄) (也就是说葡萄必须一颗颗颗掉下来,不能一口气掉下一颗以上),就把它剪下来,往后横移

后序遍历中,根节点默认最后面

后序扫描结果: H I D J E B K F G C A

查看动画:

)4)分层遍历很清楚。 从根节点开始一个接一个,从上往下,每层从左往右依次写值就可以了

分层遍历结果: A B C D E F G H I J K

说明跑外环的意思:

绕外圈一圈的真正意义是,当你穿越所有节点时,先去左边的孩子,再去右边的孩子。

)5)先遍历口诀)根先左后右

中顺序遍历:从左扎根再向右

后遍历:从左到右,然后到根

这里的根,指的是每个分叉子树(左右子树的根节点)根节点,并不只是最开始头顶的根节点,需要灵活思考理解,建议画图理解!!

二、代码展示: # include stdio.h # include stdlib.htypedefstructtree { int data; //存储数据域struct Tree *lchild遍历左子树指针struct Tree *rchild; //右子树指针(}Tree,*BitTree; BitTree CreateLink () {int data; int temp; BitTree T; Scanf('%d ',data ); //输入数据temp=getchar (; //吸收空间if (data==-1 ) ) /输入-1表示此节点下的子树没有保存数据,也就是说不会继续递归创建return NULL。 }else{t=(bittree ) malloc (sizeof ) tree ); //分配内存空间的T-data=data; //请将当前输入的数据输入到当前节点指针的数据字段中printf('%d的左子树:”,data ); T-lchild=CreateLink (; //开始左侧子树printf的递归生成(' %d的右侧的子树: )、数据); T-rchild=CreateLink (; //开始在上级节点右侧递归地生成左右子树return T; ///返回根节点}//voidshowxianxu(bittreet )//二叉树(if ) t==NULL )//在递归过程中遇到null,返回上一级节点) {return; }printf('%d”,T-data ); showxianxu(t-lchild; //递归遍历左子树showxianxu(t-rchild ); //递归遍历右部树(//按中顺序遍历voidshowzhongxu(bittreet )//先遍历二叉树(if ) t==NULL )//递归过程中遇到null,上一个节点) { rrreet } }showzhongxu(t-lchild ); //递归遍历左子树printf(%d )、T-data; showzhild (叔叔); //递归遍历右节点树//Voidshowhouxu(bittreet )//递归遍历二叉树(if ) t==NULL )//递归中遇到null,上一级节点) { rettreet } }showhouxu(t-lchild ); //递归遍历左子树showhouxu(t-rchild ); //递归遍历右子树printf(%d )、T-data; (}int main ) ) {BitTree S; printf ('请输入第一个节点的数据:n '; S=CreateLink (; //生成二叉树的根节点printf (起始遍历结果:(n ) ); showxianxu(s; //二叉树printf ((() ) n中的顺序遍历结果:(n ) ); 施仲墟(s; //二叉树的printf (() ) n后置遍历结果:(n ) ); showhouxu(s; //稍后遍历二叉树return 0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。