龙空技术网

三种非递归遍历二叉树!学到赚到~

高校孟小阿 3830

前言:

眼前看官们对“先序遍历二叉树的非递归算法”都比较关怀,兄弟们都需要剖析一些“先序遍历二叉树的非递归算法”的相关内容。那么小编同时在网络上收集了一些有关“先序遍历二叉树的非递归算法””的相关知识,希望兄弟们能喜欢,咱们一起来学习一下吧!

非递归先序遍历

思想:循环将栈中的节点出栈,并打印,将此节点作为父节点,依次将其右节点、左节点入栈(先进后出),然后再循环。

在函数中传入二叉树根节点(BintreeH)——>创建空栈,将根节点入栈——>循环(判断栈是否为空)——>将出栈元素赋值给节点变量,并打印出来——>1.如果出栈节点的右节点的不为NULL则将该节点的右节点入栈;2.如果出栈节点的左节点的不为NULL则将该节点的左节点入栈——>栈为空(先序遍历完成)退出循环。

非递归中遍历

思想:循环先将左节点入栈,左节点的左节点入栈,左节点的左节点的左节点......然后取出栈的节点打印,并将右节点赋值给节点变量再循环将该节点的右子节点的左节点入栈,该节点的右子节点的左节点的左节点入栈,该节点的右子节点的左节点的左节点的左节点......(利用循环将每一层的最左边的节点遍历完,再出栈打印,赋值为该节点的右子节点,重复循环)

在函数中传入二叉树根节点(BintreeH)——>将根节点赋值给节点变量,创建空栈——>do...while循环(判断节点变量是否为空或者栈顶是否为NULL)——>while循环(判断节点变量是否为NULL)——>将节点变量入栈,入栈节点的左节点赋值给节点变量——>判断栈顶是否为空,不为空则出栈——>打印,将节点的右子节点赋值给节点变量——>栈为空且节点变量为NULL(中序遍历完成)退出循环。

非递归后序遍历

思想:每个节点入栈两次!(首次入栈为根节点)节点入栈两次,再出栈两次分别赋值给记录当前出栈节点的节点变量以及为了获取出栈节点的子节点的节点变量,如果出栈的两个节点相同,则分别将该节点的右节点、左节点依次入栈(两次);当不相同时将后一个出栈节点打印输出,前一个出栈节点入栈,循环直至栈为空。

效果

标签: #先序遍历二叉树的非递归算法