zoukankan      html  css  js  c++  java
  • 30 Day Challenge Day 3 | Leetcode 145. Binary Tree Postorder Traversal

    题解

    如果是刚做过 144. preorder traversal 的题,这道题不难延伸,虽然这是一道“hard”题。

    postorder是“left ==> right ==> root”的遍历顺序,还是应用栈(stack)的数据结构,由于树的遍历必须是自上而下,也就是root必须在前面,不妨把问题转换乘“root ==> right ==> left”的顺序遍历,应用类似 144. preoder 的方法,就容易得到一个以这个顺序遍历的数据vector。只是要记得在函数返回前将这个vector倒序,这样就使得顺序变回原来的要求。

    如果过程想象不清楚的话,画图手动实现一个例子是个比较好的方法去检验。

    class Solution {
    public:
        vector<int> postorderTraversal(TreeNode* root) {
            vector<int> ret;
            stack<TreeNode*> s;
    
            if(!root) return ret;
            
            s.push(root);
            
            while(!s.empty()) {
                TreeNode* n = s.top();
                s.pop();
                
                ret.push_back(n->val);
                
                if(n->left) s.push(n->left);
                if(n->right) s.push(n->right);
            }
            
            reverse(ret.begin(), ret.end());
            
            return ret;
        }
    };
    
  • 相关阅读:
    JSON文件和Json对象
    如何判断一个数为几进制
    热更新
    UIPageView
    quick-cocos2d中自定义按钮(BUTTON)
    lua与oc交互
    Test1
    Visual Studio 附加到进程调试
    C# 判断一个单链表是否有环及环长和环的入口点
    Asp.Net Forms获取UEeditor内容
  • 原文地址:https://www.cnblogs.com/casperwin/p/13521232.html
Copyright © 2011-2022 走看看