二叉树遍历(图解) 旧城等待, 2022-06-08 08:20 150阅读 0赞 转载自:[http://blog.csdn.net/jwentao01/article/details/46843049][http_blog.csdn.net_jwentao01_article_details_46843049] 二叉树的顺序存储结构就是用一维数组存储二叉树中的节点,并且节点的存储位置,也就是数组的下标要能体现节点之间的逻辑关系。—–>一般只用于完全二叉树 链式存储—–>二叉链表 定义: lchild | data | rchild(两个指针域,一个数据域) typedef struct Node { ElemType data; struct Node *lchild, *rchild; }BiTnode,* BiTree; 1 2 3 4 注意点: 1)已知 前序遍历序列 和 中序遍历序列,可以唯一确定一颗二叉树 2)已知 中序遍历序列和 后序遍历序列,可以唯一确定一颗二叉树 而已知 前序和后序 是不能确定一颗二叉树的 二叉树的遍历:是指从根节点出发,按照某种次序依次访问二叉树中的所有节点,使得每个节点被访问一次且仅被访问一次。 1、前序遍历:根-左-右 ![这里写图片描述][20150711163642225] 代码: void PreOrder(BiTree T) /*先序遍历: 根-左-右*/ { if(T != NULL) { Visit(T); /*访问根节点*/ PreOrder(T->lchild); /*访问左子节点*/ PreOrder(T->rchild); /*访问右子节点*/ } } 1 2 3 4 5 6 7 8 9 2、中序遍历:左-根-右 ![这里写图片描述][20150711163947878] 代码: void InOrder(BiTree T)/*中序遍历:左-根-右*/ { if(T != NULL) { InOrder(T->lchild); //左 Visit(T); //根 InOrder(T->rchild); //右 } } 1 2 3 4 5 6 7 8 9 3、后序遍历:左-右-根 ![这里写图片描述][20150711164230063] 代码: void PostOrder(BiTree T)/*后序遍历:左-右-根*/ { if(T != NULL) { PostOrder(T->lchild); //左 PostOrder(T->rchild); //右 Visit(T); //根 } } 1 2 3 4 5 6 7 8 9 4、层序遍历:从根节点出发,依次访问左右孩子结点,再从左右孩子出发,依次它们的孩子结点,直到节点访问完毕 ![这里写图片描述][20150711164443595] 代码:该程序用到了队列的思想,可以参考下图理解 (该图为展示的是 图的广度优先遍历示意图,应用的就是层序遍历的思想) /*层序遍历 思路:按从左至右的顺序来逐层访问每个节点,层序遍历的过程需要队列*/ void LevelOrder(BiTree T) { BiTree p = T; queue<BiTree> queue; /*队列*/ queue.push(p); /*根节点入队*/ while(!queue.empty()) /*队列不空循环 */ { p = queue.front(); /*对头元素出队*/ //printf("%c ",p->data); /*访问p指向的结点*/ cout << p->data << " "; queue.pop(); /*退出队列*/ if(p->lchild != NULL){ /*左子树不空,将左子树入队*/ queue.push(p->lchild); } if(p->rchild != NULL){ /*右子树不空,将右子树入队*/ queue.push(p->rchild); } } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ![这里写图片描述][20150711165614466] [http_blog.csdn.net_jwentao01_article_details_46843049]: http://blog.csdn.net/jwentao01/article/details/46843049 [20150711163642225]: /images/20220608/b68bd619c575427588fe38c0b8c7747a.png [20150711163947878]: /images/20220608/7fdbc8348a2740a1b85533c62ad54fb6.png [20150711164230063]: /images/20220608/03380138f2fa4dcab1af96c52003ed55.png [20150711164443595]: /images/20220608/b67b7e419f2a460687320564a926cd59.png [20150711165614466]: /images/20220608/6710c51e7b5440bfbe8038ac039e4b5b.png
相关 二叉树 二叉树遍历 通过二叉树遍历求得二叉树 什么是二叉树 > > 二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且 偏执的太偏执、/ 2022年12月04日 01:08/ 0 赞/ 319 阅读
相关 遍历二叉树 1. 二叉树的遍历 遍历定义 ——顺着某一条搜索路径巡访二叉树中的结点,使得 每个结点均被访问一次,而且仅被访问一次。 “访问”的含义可以很广,如:输出结点的信息等。 迈不过友情╰/ 2022年08月22日 14:26/ 0 赞/ 452 阅读
相关 二叉树遍历解析 一、简述 今天来总结下二叉树前序、中序、后序遍历相互求法,即如果知道两个的遍历,如何求第三种遍历方法,画出来二叉树,然后根据各种遍历不同的特性来求,下面我们分别说明。 快来打我*/ 2022年07月12日 03:58/ 0 赞/ 164 阅读
相关 遍历二叉树 遍历二叉树 二叉树是由3个基本单元组成的:根结点、左子树和右子树。 若限定先左后右的顺序,则遍历二叉树只有三种情况分别称为先(根)序遍历、中(根)序遍历和后(根)序遍 比眉伴天荒/ 2022年06月08日 00:48/ 0 赞/ 317 阅读
相关 遍历二叉树 遍历二叉树 今天我们学习了二叉树,现在我就基于二叉树的递归定义来说一说遍历二叉树的三种方法:先序、中序和后序。 根据二叉树的递归定义可知,二叉树是由3个基本单元组成:根结点 傷城~/ 2022年06月05日 08:11/ 0 赞/ 369 阅读
相关 二叉树遍历 include<iostream> include<queue> using namespace std; //二叉树结点 ╰+攻爆jí腚メ/ 2022年06月04日 05:35/ 0 赞/ 315 阅读
相关 二叉树遍历 前序遍历(左中右)ABDGHCEIF ![前序遍历][70] 中序遍历(左根右)GDHBAEICF![中序遍历][70 1] 后序遍历(左右根)GHDBIEFCA![ Bertha 。/ 2022年05月11日 13:48/ 0 赞/ 373 阅读
相关 二叉树遍历 二叉树是数据结构中很重要的一个章节,很多同学反应很难,今天我就把我平时的经验给大家讲解一下,今天讲一下二叉树的遍历 工具/原料 ● 数据结构知识 ● 了解树的定义 爱被打了一巴掌/ 2022年05月10日 03:08/ 0 赞/ 330 阅读
相关 遍历二叉树 用递归的方法实现前序遍历,中序遍历,后序遍历: 用递归的方法遍历的时候,其实每个节点都遍历了三遍,根据打印时间的不同,即可实现前序中序及后续,这就是三个遍历代码一样而打印顺序 浅浅的花香味﹌/ 2021年11月01日 15:28/ 0 赞/ 477 阅读
还没有评论,来说两句吧...