zoukankan      html  css  js  c++  java
  • Binary Tree Postorder Traversal ***

    Given a binary tree, return the postorder traversal of its nodes' values.

    For example:
    Given binary tree {1,#,2,3},

       1
        
         2
        /
       3
    

    return [3,2,1].

    Note: Recursive solution is trivial, could you do it iteratively?

    Analyse: root->left, root->right, root.

    1. Recursion

        Runtime: 0ms.

     1 /**
     2  * Definition for a binary tree node.
     3  * struct TreeNode {
     4  *     int val;
     5  *     TreeNode *left;
     6  *     TreeNode *right;
     7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     8  * };
     9  */
    10 class Solution {
    11 public:
    12     vector<int> postorderTraversal(TreeNode* root) {
    13         vector<int> result;
    14         if(!root) return result;
    15         
    16         postorder(root, result);
    17         return result;
    18     }
    19     void postorder(TreeNode* root, vector<int>& result){
    20         if(root->left) postorder(root->left, result);
    21         if(root->right) postorder(root->right, result);
    22         result.push_back(root->val);
    23     }
    24 };

    2. Iteration: Only when the children of the parent are visited or the parent has no children, this parent can be pushed into the vector as visited. Otherwise, we should push its right child and left child respectively. See reference from Binary Tree Postorder Traversal

        Runtime: 0ms.

     1 /**
     2  * Definition for a binary tree node.
     3  * struct TreeNode {
     4  *     int val;
     5  *     TreeNode *left;
     6  *     TreeNode *right;
     7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     8  * };
     9  */
    10 class Solution {
    11 public:
    12     vector<int> postorderTraversal(TreeNode* root) {
    13         vector<int> result;
    14         if(!root) return result;
    15         stack<TreeNode* >stk;
    16         stk.push(root);
    17         TreeNode* visited = root;
    18         
    19         while(!stk.empty()){
    20             root = stk.top();
    21             
    22             if(root->right == visited || root->left == visited || (!root->left) && (!root->right)){
    23                 result.push_back(root->val);
    24                 stk.pop();
    25                 visited = root;
    26             }
    27             else{
    28                 if(root->right) stk.push(root->right);
    29                 if(root->left) stk.push(root->left);
    30             }
    31         }
    32         return result;
    33     }
    34 };
  • 相关阅读:
    缓存IO读写的方式
    mapboxgl 纠偏百度地图
    GIS常用算法
    DevExpress VCL TdxBar工具栏上的按钮等居右对齐无效的问题
    dxRichEditControl、Invalid operation in GDI+ (Code: 2)
    Indy+POP/SMTP收发邮件
    VUE父组件给子组件传对象
    Linux下进程间通信
    Linux下守护进程
    Linux下进程控制相关
  • 原文地址:https://www.cnblogs.com/amazingzoe/p/4680453.html
Copyright © 2011-2022 走看看