zoukankan      html  css  js  c++  java
  • 二叉树后序遍历 递归 非递归

    后序遍历的操作如下:
    1)后序遍历左子树;
    2)后序遍历右子树;
    3)访问根节点;


    对应的递归算法如下:

    void PostOrder(Bitree T) {
    	if (T != NULL) {
    		PostOrder(T->lchild);
    		PostOrder(T->rchild);
    		visit(T);
         }
    }
    

    非递归算法算法思想:当用堆栈来存储结点时,必须分清返回根结点时是从左子树返回的
    还是从右子树返回的。所以,使用辅助指针r,指向其最近访问过的结点。也可在结点
    增加一个标志域,记录是否已被访问。
    对应的非递归算法如下:

    void PostOrder(Bitree T) {
    	InitStack(S);
    	p = T;
    	r = NULL;
    	while (p || !IsEmpty(S)) {
    		if (p) {
    			push(S, p);
    			p = p->lchild;
    		}
    		else {
    			Get(S, p);
    			if (p->rchild&&p->rchild != r) {
    				p = p->rchild;
    				push(S, p);
    				p = p->lchild;
    			}
    			else {
    				pop(S, p);
    				visit(p->data);
    				r = p;
    				p = NULL;
    			}
    		}
    	}
    }
    
  • 相关阅读:
    三、python语法(定义,赋值,注释,输入输出)
    二、Python安装
    一、python简介
    Java第十二天
    Java第十一天
    Java第十天
    Java第九天
    Java第八天
    Java第七天
    Java第六天
  • 原文地址:https://www.cnblogs.com/brainstorm-yc/p/11774288.html
Copyright © 2011-2022 走看看