C语言二叉树遍历超详图解,小白轻松理解原理,玩转二叉树

奇异果实名认证 发表于 2019-03-07 00:30 | 显示全部楼层 | 复制链接分享      上一主题  翻页  下一主题
二叉树的顺序存储结构就是用一维数组存储二叉树中的节点,并且节点的存储位置,也就是数组的下标要能体现节点之间的逻辑关系。—–>一般只用于完全二叉树

链式存储—–>二叉链表
定义: lchild | data | rchild(两个指针域,一个数据域)
typedef struct Node { ElemType data; struct Node *lchild, *rchild;}BiTnode,* BiTree;
注意点:
1)已知 前序遍历序列中序遍历序列可以唯一确定一颗二叉树
2)已知 中序遍历序列后序遍历序列可以唯一确定一颗二叉树
而已知 前序和后序 是不能确定一颗二叉树的
二叉树的遍历:是指从根节点出发,按照某种次序依次访问二叉树中的所有节点,使得每个节点被访问一次且仅被访问一次。
1、前序遍历:根-左-右
t01b6bee7221c733b7e.jpg

代码:
void PreOrder(BiTree T) /*先序遍历: 根-左-右*/{ if(T != NULL) { Visit(T); /*访问根节点*/ PreOrder(T->lchild); /*访问左子节点*/ PreOrder(T->rchild); /*访问右子节点*/ }}
2、中序遍历:左-根-右
t01e1e4aa9e139ea20a.jpg

代码:
void InOrder(BiTree T)/*中序遍历:左-根-右*/{ if(T != NULL) { InOrder(T->lchild); //左 Visit(T); //根 InOrder(T->rchild); //右 }}
3、后序遍历:左-右-根
t01d272843c830f5586.jpg

代码:
void PostOrder(BiTree T)/*后序遍历:左-右-根*/{ if(T != NULL) { PostOrder(T->lchild); //左 PostOrder(T->rchild); //右 Visit(T); //根 }}
4、层序遍历:从根节点出发,依次访问左右孩子结点,再从左右孩子出发,依次它们的孩子结点,直到节点访问完毕
t014332490c5fd90c7b.jpg

代码:该程序用到了队列的思想,可以参考下图理解
(该图为展示的是 图的广度优先遍历示意图,应用的就是层序遍历的思想
/*层序遍历 思路:按从左至右的顺序来逐层访问每个节点,层序遍历的过程需要队列*/void LevelOrder(BiTree T){ BiTree p = T;  queue queue; /*队列*/ queue.push(p); /*根节点入队*/  while(!queue.empty()) /*队列不空循环 */ { p = queue.front(); /*对头元素出队*/ //printf("%c ",p->data); /*访问p指向的结点*/ cout <<>data <<>
  queue.pop(); /*退出队列*/ if(p->lchild != NULL){ /*左子树不空,将左子树入队*/ queue.push(p->lchild); } if(p->rchild != NULL){ /*右子树不空,将右子树入队*/ queue.push(p->rchild); } }}
t01fba86cdc8e318271.jpg

  距米网  

找到您想要的设计

工程师、学生在线交流学习平台
关注我们

手机版- 距米网 |苏公网安备32041102000587号

© 2017-2024 常州居居米智能技术有限公司 苏ICP备18040927号-1