zoukankan      html  css  js  c++  java
  • leetcode 145. 二叉树的后序遍历

    给定一个二叉树,返回它的 后序 遍历。

    示例:

    输入: [1,null,2,3]  
       1
        
         2
        /
       3 
    
    输出: [3,2,1]

    进阶: 递归算法很简单,你可以通过迭代算法完成吗?

     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     void dfs(TreeNode* root, vector<int>& ans){
    13         if(root == NULL) return;
    14         if(root->left) dfs(root->left, ans);
    15         if(root->right) dfs(root->right, ans);
    16         ans.push_back(root->val);
    17     }
    18     vector<int> postorderTraversal(TreeNode* root) {
    19         vector<int> ans;
    20         dfs(root, ans);
    21         return ans;
    22     }
    23 };

    迭代的实现:用栈的方式来实现

     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 #include<stack>
    11 class Solution {
    12 public:
    13     vector<int> postorderTraversal(TreeNode* root) {
    14         stack<TreeNode*> s;
    15         s.push(root);
    16         vector<int> ans;
    17         if(root == NULL) return ans;
    18         while(!s.empty()){
    19             TreeNode* temp = s.top();
    20             if(temp->left){
    21                 s.push(temp->left);
    22                 temp->left = NULL;
    23             } else if(temp->right){
    24                 s.push(temp->right);
    25                 temp->right = NULL;
    26             } else{
    27                 ans.push_back(temp->val);
    28                 s.pop();
    29             }
    30         }
    31         return ans;
    32     }
    33 };
    有疑惑或者更好的解决方法的朋友,可以联系我,大家一起探讨。qq:1546431565
  • 相关阅读:
    vue keep-alive 缓存组件
    媒体查询手机屏幕横屏竖屏
    手机端rem
    vue技术栈导出pdf
    判断是否为微信浏览器还是支付宝浏览器
    当前时间和倒计时效果
    npm install 报错node-sass模块找不到
    Lenovo System x3650 设置管理接口地址
    Python之excel文件追加内容
    python3 文件操作
  • 原文地址:https://www.cnblogs.com/mr-stn/p/8978055.html
Copyright © 2011-2022 走看看