栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

leetcode145.二叉树的后序遍历(简单)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode145.二叉树的后序遍历(简单)


注意:非递归的效率要高于递归的效率

方法一:递归

class Solution {
public:
    void postorder(vector &ans, TreeNode* root);
    vector postorderTraversal(TreeNode* root) {
        vector ans;
        postorder(ans, root);
        return ans;
    }
};
void Solution :: postorder(vector &ans, TreeNode* root) {
    if (root == nullptr) return ;
    postorder(ans, root->left);
    postorder(ans, root->right);
    ans.push_back(root->val);
}

方法二:两个栈实现非递归
思想:
两个栈stk1 stk2实现:初始将root压入stk1,然后栈顶出栈stk1入栈到stk2,同时将该元素的左孩子,右孩子依次压入stk1,重复此过程直到stk1为空,依次出栈stk2的元素得到的就是后序序列

class Solution {
public:
    vector postorderTraversal(TreeNode* root) {
        
        stack stk1, stk2;
        vector ans;
        if (!root) return ans;
        stk1.push(root);
        while (!stk1.empty()) {
            TreeNode* top = stk1.top();
            stk1.pop();
            stk2.push(top);
            if (top->left) stk1.push(top->left);
            if (top->right) stk1.push(top->right);
        }
        while (!stk2.empty()) {
            ans.push_back(stk2.top()->val);
            stk2.pop();
        }
        return ans;
    }
};

方法三:一个栈实现非递归
top保存的是父结点
pre保存的是上一个访问的结点
root保存的是当前要遍历的结点

class Solution {
public:
    vector postorderTraversal(TreeNode* root) {
        stack stk;
        TreeNode* pre = nullptr; //pre保存前一个访问的结点,root表示当前正在指向的结点
        vector ans;
        while (root || !stk.empty()) {
            while (root) {
                stk.push(root);
                root = root->left;
            }
            TreeNode* top = stk.top(); //保存父节点,如果不访问右结点的话就出栈,否则就不出栈
            if (top->right == nullptr || top->right == pre) { //如果右子树为空或者从右子树返回来的则继续出栈下一个
                ans.push_back(top->val);
                stk.pop();
                pre = top;
                root = nullptr;
            }else { //否则遍历右子树
                root = top->right;
            }
        }
        return ans;
    }
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/297834.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号