自学内容网 自学内容网

每日一练:二叉树的中序遍历

94. 二叉树的中序遍历 - 力扣(LeetCode)

一、题目要求

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

示例 1:

输入:root = [1,null,2,3]
输出:[1,3,2]

示例 2:

输入:root = []
输出:[]

示例 3:

输入:root = [1]
输出:[1]

提示:

  • 树中节点数目在范围 [0, 100] 内
  • -100 <= Node.val <= 100

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

二、解法1-递归 O(N)

        中序遍历的次序是 左-根-右,使用递归很简单就能写出来

class Solution {
    void _inorderTravinersal(TreeNode* root) {
        if (root == nullptr)
            return;
        _inorderTravinersal(root->left); // 左
        _v.push_back(root->val);         // 根
        _inorderTravinersal(root->right);// 右
    }
public:
    vector<int> inorderTraversal(TreeNode* root) {
        _inorderTravinersal(root);
        return _v;
    }
private:
    vector<int> _v;
};

三、解法2-迭代 进阶

        使用栈来模拟递归。

class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> v;
        stack<TreeNode*> s;
        while (root != nullptr || s.empty() == false) {
            while (root != nullptr) {
                s.push(root);
                root = root->left;
            }
            root = s.top();
            s.pop();
            v.push_back(root->val);
            root = root->right; // 下一次循环检查是否有右
        }
        return v;
    }
};


原文地址:https://blog.csdn.net/2303_78095330/article/details/142465485

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!