每日一道算法题--leetcode 145--二叉树的后序遍历--python&C++

410 阅读1分钟

【题目描述】

【思路一:迭代】

利用栈实现迭代,可以采用两个栈,也可以利用一个栈之后将结构逆向输出。 根节点先入栈,然后进入while循环,弹出栈顶元素并保存值在一个列表re中,再将栈顶元素的左右子节点依次入栈,然后继续执行循环即可。将re逆向返回即可。

C++:
class Solution {
public:
    vector<int> postorderTraversal(TreeNode* root) {
        stack<TreeNode*> stack;
        vector<int> re;
        if(!root){return re;}
        stack.push(root);
        while(!stack.empty()){
            TreeNode* top=stack.top();
            stack.pop();
            re.push_back(top->val);
            if(top->left){stack.push(top->left);}
            if(top->right){stack.push(top->right);}
        }
        vector<int> re2;
        for(int i=re.size()-1;i>=0;i--){
            re2.push_back(re[i]);
        }
        return re2;
    }
};
python3:
class Solution:
    def postorderTraversal(self, root: TreeNode) -> List[int]:
        re=[]
        if not root:
            return []
        stack=[root]
        while stack:
            top=stack.pop()
            re.append(top.val)
            if top.left:
                stack.append(top.left)
            if top.right:
                stack.append(top.right)
        return re[::-1]

【思路二:递归】

递归太简单了,不多说,直接看代码。

C++:
class Solution {
public:
    vector<int> re;
    vector<int> postorderTraversal(TreeNode* root) {
        dfs(root);
        return re;
    }
    void dfs(TreeNode* root){
        if (root){
            dfs(root->left);
            dfs(root->right);
            re.push_back(root->val);
        }
    }
};
python3:
class Solution:
    def postorderTraversal(self, root: TreeNode) -> List[int]:
        self.re=[]
        self.dfs(root)
        return self.re

    def dfs(self,root):
        if root:
            self.dfs(root.left)
            self.dfs(root.right)
            self.re.append(root.val)