二叉树的遍历算法
非递归遍历算法分析:
我们在遍历二叉树时,一般情况下是
从根节点开始,到叶子节点结束。——自上而下的顺序
如果观察整个遍历过程,我们就会发现
在中序,后序遍历方式中,
我们访问二叉树节点的顺序却是自下而上的。
所以,LIFO的栈是一种可以用来辅助完成遍历过程的结构。
将二叉树视为一条左链表+多个右子树
先序遍历:根节点→左孩子→右孩子
递归算法:
void traverse(BiTree * p){
if(!p)return;
visit(p);
traverse(p->leftchild);
traverse(p->rightchild);
return;
}
非递归算法1(栈辅助):
Stack<BiTree*> s1;
s1.push(p);
while(!s1.empty()){
p=s1.pop();
visit(p);
s1.push(p->rightchild);
si.push