• 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;
        }
    };
    以大多数人努力程度之低,根本轮不到去拼天赋~
  • 相关阅读:
    js如何判断访问来源是来自搜索引擎(蜘蛛人)还是直接访问
    thinkphp AOP(面向切面编程)
    crontab命令详解 含启动/重启/停止
    直播协议的选择:RTMP vs. HLS
    说一下PHP中die()和exit()区别
    宝塔Linux常用命令
    阿里云Redis公网连接的解决办法
    DMA及cache一致性的学习心得 --dma_alloc_writecombine【转】
    DMA内存申请--dma_alloc_coherent 及 寄存器与内存【转】
    内核中container_of宏的详细分析【转】
  • 原文地址:https://www.cnblogs.com/gcter/p/15338492.html
Copyright © 2020-2023  润新知