Leetcode C++《热题 Hot 100-43》94.二叉树的中序遍历

Leetcode C++《热题 Hot 100-43》94.二叉树的中序遍历

  1. 题目
    给定一个二叉树,返回它的中序 遍历。

示例:

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

2
/
3

输出: [1,3,2]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-inorder-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  1. 思路
  • 方案1: 递归大法,简单容易理解,而且时间空间复杂度都是n
  • 方案2: 迭代,使用栈,只要有左孩子,左孩子依次如栈。左子树都遍历完了之后开始遍历父节点,然后处理右子树!!!时间空间复杂度都是n 【重要,加深理解】
  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:

    //方案1:递归
    /*vector<int> res;
    vector<int> inorderTraversal(TreeNode* root) {
        midTaverse(root);
        return res;
    }

    void midTaverse(TreeNode* root) {
        if (root == NULL)
            return;
        //L V R
        midTaverse(root->left);
        res.push_back(root->val);
        midTaverse(root->right);

    }*/
    //方案2:
    vector<int> inorderTraversal(TreeNode* root) {
        stack<TreeNode*> temp;
        vector<int> res;
        if (root == NULL)
            return res;
        TreeNode* node = root;
        while(node != NULL || !temp.empty()) {
            while (node!= NULL) {
                temp.push(node);
                node = node->left;
            }
            node = temp.top();
            temp.pop();
            res.push_back(node->val);
            node = node->right;
        }
        return res;
    }
};
发布了205 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Alexia23/article/details/104211079