二叉树的中序遍历 LeetCode热题100

题目

给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。

思路

递归,按左中右的顺序添加节点。

利用栈先进后出的特性模拟递归。

代码

cpp 复制代码
/**递归写法
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<int>ans;
    void InorderTraversal(TreeNode* node){
        if(node==nullptr){
            return ;
        }
        InorderTraversal(node->left);
        ans.push_back(node->val);
        InorderTraversal(node->right);
    }
    vector<int> inorderTraversal(TreeNode* root) {
        ans.clear();
        InorderTraversal(root);
        return ans;
    }
};
cpp 复制代码
/**栈优化
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int>ans;
        ans.clear();    
        stack<TreeNode*>st;
        while(!st.empty()){
            st.pop();
        }
        while(root!=nullptr||!st.empty()){
            while(root){
                st.push(root);
                root=root->left;
            }
            root=st.top();
            ans.push_back(root->val);
            st.pop();
            root = root->right;
        }
        return ans;
    }
};
相关推荐
007php00733 分钟前
京东面试题解析:同步方法、线程池、Spring、Dubbo、消息队列、Redis等
开发语言·后端·百度·面试·职场和发展·架构·1024程序员节
想唱rap1 小时前
C++ list 类的使用
c语言·开发语言·数据结构·c++·笔记·算法·list
l1t1 小时前
利用DuckDB SQL求解集合数学题
数据库·sql·算法·集合·duckdb
yuyanjingtao1 小时前
CCF-GESP 等级考试 2024年9月认证C++四级真题解析
c++·算法·青少年编程·gesp·csp-j/s
微笑尅乐1 小时前
洗牌算法讲解——力扣384.打乱数组
算法·leetcode·职场和发展
Lei_3359671 小时前
[算法]背包DP(01背包、完全背包问题、多重背包、分组背包、混合背包问题、有依赖的背包问题等)
c++·算法
uesowys1 小时前
华为OD算法开发指导-比赛的冠亚季军
算法·华为od
绝无仅有1 小时前
腾讯面试文章解析:MySQL慢查询,存储引擎,事务,结构算法等总结与实战
后端·面试·github
天选之女wow1 小时前
【代码随想录算法训练营——Day48】单调栈——42.接雨水、84.柱状图中最大的矩形
算法·leetcode
不知名。。。。。。。。1 小时前
算法之动态规划
算法·动态规划