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;
    			}
    		}
    	}
    }
    
  • 相关阅读:
    linux
    python(4)
    python(4)
    python(4)–yield实现异步
    python(4)-迭代器 和 生成器
    JavaScript函数参数问题
    文字垂直居中
    Window-document-javascript
    Java的StringTokenizer类
    Web应用与Spring MVC锁session
  • 原文地址:https://www.cnblogs.com/brainstorm-yc/p/11774288.html
Copyright © 2011-2022 走看看