遍历二叉树的代码实现
2023-09-27 14:25:57 时间
BiTree p = T; //p为遍历二叉树的指针
while(p || !IsEmpty(S)){ //二叉树不为空或栈不空是继续循环
if(p != NULL){
vist(p) //访问拍p
Push(S,p); //p节点入栈
p = p- lchild; //继续向左遍历
else{
Pop(S,p); //p出栈
p = p- rchild; //转向右子树遍历
}中序遍历(左--根--右)递归法
树的子结构(剑指offer 26)Java先序遍历+子结构判断 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。
(Java)构造二叉树OJ题(LeetCode105 根据前序与中序构造二叉树,LeetCode106 根据后序与中序构造二叉树) 从前序遍历可以得到根结点,从中序中可以得到跟结点的左右子树部分,我们在构造二叉树的时候是从前序找根,再在中序中找根的左右子树部分先创建根节点再分别创建跟的左子树与跟的右子树,这个过程是一个递归,每次递归都要确定在中序哪个区间找新的根。
void InOrder(BiTree T){ if(T != NULL){ InOrder(T- lchild); //递归遍历左子树 visit(T); //访问根节点 InOrder(T- rchild); //递归遍历右子树 }非递归法
void InOrder(BiTree T){ InitStack(S); //使用栈存储二叉树的节点 BiTree p = T; //p为遍历二叉树的指针 while(p || !IsEmpty(S)){ //二叉树不为空或栈不空是继续循环 if(p != NULL){ Push(S,p); //p节点入栈 p = p- lchild; //继续向左遍历 else{ Pop(S,p); //p出栈 visit(p); //访问p p = p- rchild; //转向右子树遍历 }后序遍历(左--右--根)递归法
void PostOrder(BiTree T){ if(T != NULL){ PostOrder(T- lchild); //递归遍历左子树 PostOrder(T- rchild); //递归遍历右子树 visit(T); //访问根节点 }非递归法
void PostOrder(BiTree T){ InitStack(S); //使用栈存储二叉树的节点 BiTree p = T; //p为遍历二叉树的指针 BiTree r = NULL; //记录最近访问的节点 while(p || !IsEmpty(S)){ //二叉树不为空或栈不空是继续循环 if(p != NULL){ Push(S,p); //p节点入栈 p = p- lchild; //继续向左遍历 else{ GetTop(S,p); //读取栈顶节点,不出栈 if(p- rchild p- rchild != r){ //右子树存在,且未被访问 p = p- rchild; Push(S,p); //p节点入栈 p = p- lchild; //转左遍历 else{ Pop(S,p); //p出栈 visit(p); //访问p r = p; //记录最近一次访问的节点 p = NULL; }层序遍历
void LevelOrder(BiTree T){ InitQueue(Q); //使用队列存储二叉树节点 BiTree p; EnQueue(Q,T); //根节点入队 while(!IsEmpty(Q)){ //队列不空继续循环 DeQueue(Q,p); //队头节点出队 vist(p); //访问队头节点 if(p- lchild != NULL){ EnQueue(Q,p- lchild); //左孩子入队 if(p- rchild != NULL){ EnQueue(Q,p- rchild); //右孩子入队 }
树的子结构(剑指offer 26)Java先序遍历+子结构判断 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。
(Java)构造二叉树OJ题(LeetCode105 根据前序与中序构造二叉树,LeetCode106 根据后序与中序构造二叉树) 从前序遍历可以得到根结点,从中序中可以得到跟结点的左右子树部分,我们在构造二叉树的时候是从前序找根,再在中序中找根的左右子树部分先创建根节点再分别创建跟的左子树与跟的右子树,这个过程是一个递归,每次递归都要确定在中序哪个区间找新的根。
相关文章
- C++ 进程遍历(最简单)
- 【算法】【二叉树模块】通过先序遍历和中序遍历获取后序遍历数组(不重构二叉树)
- 【jQuery:遍历同样class的全部值,遍历某一列td的值】
- Google Earth Engine(GEE)——利用map遍历实现影像的逐年筛选
- 二叉树的宽度优先遍历BFS:按层的遍历方式,请你用队列实现DFS,或者请你用栈实现BFS
- 前端基础 -JQuery之遍历
- 五二不休息,今天也学习,从JS执行栈角度图解递归以及二叉树的前、中、后遍历的底层差异
- Qt中遍历文件夹的方法
- nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG
- js 遍历
- Angular 序列化和反序列化和遍历
- P1443 马的遍历-洛谷(BFS)
- Java遍历Map对象的四种方式
- Linux-016-Centos Shell 遍历文本信息,通过流水号批量获取日志信息并保存结果
- LeetCode 94. 二叉树的中序遍历
- 二叉树遍历(层次)递归法
- 95、【树与二叉树】leetcode ——257. 二叉树的所有路径:递归法DFS/回溯法+迭代法DFS+层序遍历BFS(C++版本)
- 88、【树与二叉树】leetcode ——226. 翻转二叉树:先中后序的递归与DFS非递归遍历+BFS层次遍历(C++版本)
- 已知二叉树的先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列
- 求二叉树的先序遍历
- (3.8)存储引擎--索引的遍历与维护
- [LeetCode] 889. Construct Binary Tree from Preorder and Postorder Traversal 由先序和后序遍历建立二叉树
- LeetCode根据前序与中序、中序与后序,前序与后序遍历序列构建二叉树
- Java小白入门200例113之HashSet遍历的几种方式
- leetcode算法145.二叉树的后序遍历
- leetcode算法94.二叉树的中序遍历