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 };
  • 相关阅读:
    Eclipse上Maven环境配置使用 (全)
    Eclipse查看Servlet源码
    Eclipse中在xml文件中,ctrl+左键的快捷键,点击class定位,不生效
    注意事项
    项目路径问题
    springmvc配置文件<context:component-scan>
    向eclipse的JavaWeb项目中导入jar包
    用eclipse创建动态web项目手动生成web.xml方法
    WEB后台认证机制
    mui项目中如何使用原生JavaScript代替jquery来操作dom
  • 原文地址:https://www.cnblogs.com/amazingzoe/p/4680453.html
Copyright © 2011-2022 走看看