二叉树后序遍历

Posted Blocking The Sky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树后序遍历相关的知识,希望对你有一定的参考价值。

堆栈非递归实现

class Solution 
public:
    vector<int> result;
    vector<int> postorderTraversal(TreeNode* root) 
        stack<TreeNode*> s;
        TreeNode *p;
        p=NULL;
        while(root||!s.empty())
            if(root)
                s.push(root);
                root=root->left;
            
            else
                root=s.top();
                if(root->right&&root->right!=p)//左子树不为空且没有访问过
                    root=root->right;
                
                else
                    s.pop();
                    //visit(root)
                    result.push_back(root->val);
                    p=root;//p更新右子树的根结点
                    root=NULL;//表示右子树遍历结束
                
            
        
        return result;
    
;

递归实现

class Solution 
public:
    vector<int> result;
    vector<int> postorderTraversal(TreeNode* root) 
        if(root)
            postorderTraversal(root->left);
            postorderTraversal(root->right);
            //visit(root)
            result.push_back(root->val);
        
        return result;
    
;

以上是关于二叉树后序遍历的主要内容,如果未能解决你的问题,请参考以下文章

81 - 判断列表是否为搜索二叉树后序遍历的结果

二叉树后序遍历 (先序和中序求后序)

二叉树前序中序和后序遍历的非递归实现

(机考)二叉树后序遍历

二叉树后序遍历

二叉树遍历非递归算法——后序遍历