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

    方法1 递归解法:

    左右根

    代码

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        vector<int>resut;
        vector<int> postorderTraversal(TreeNode* root) {
            transverse(root);
            return resut;
    
        }
        void transverse(TreeNode * node)
        {
            if (node!=NULL)
            {
    
                if (node->left!=NULL)
                {
                    transverse(node->left);
                }
                if (node->right!=NULL)
                {
                    transverse(node->right);
                }
                resut.push_back(node->val);
            }
        }
    };/**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        vector<int>resut;
        vector<int> postorderTraversal(TreeNode* root) {
            transverse(root);
            return resut;
    
        }
        void transverse(TreeNode * node)
        {
            if (node!=NULL)
            {
    
                if (node->left!=NULL)
                {
                    transverse(node->left);
                }
                if (node->right!=NULL)
                {
                    transverse(node->right);
                }
                resut.push_back(node->val);
            }
        }
    };

    方法2:迭代法

    代码

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
    
        vector<int> postorderTraversal(TreeNode* root) {
            stack<TreeNode*>S;//定义栈存放右子树
            vector<int>resut;
            TreeNode*Rt = root;//迭代根节点
            while(Rt || S.size())
            {
                while(Rt)
                {
                    //先序:根左右
                    resut.push_back(Rt->val);//访问当前节点的值
                    S.push(Rt->left);//将左子树保存到栈中
                    Rt = Rt->right; //访问迭代节点的右子树
                }
                Rt = S.top();S.pop();//S栈顶元素出栈
            }
            reverse(resut.begin(),resut.end()); //翻转先序遍历的结果得到后序遍历的结果
            return resut;
        }
    };
    以大多数人努力程度之低,根本轮不到去拼天赋~
  • 相关阅读:
    Quartz任务调度系统,克隆表达式
    Java故障分析基础
    SpringData JPA整理
    Mockito教程
    SpringMVC单元测试-MockMvc
    SpringBoot Actuator & SpringBoot Admin
    Swagger
    Spring @AliasFor
    java命令查询属性信息
    windows版本免安装redis, nginx, zookeeper
  • 原文地址:https://www.cnblogs.com/gcter/p/15338492.html
Copyright © 2011-2022 走看看