LeetCode - 0092 - Binary Tree Inorder Traversal

题目区域

要求用迭代的方式实现一个二叉树的中序遍历。

原题链接

Binary Tree Inorder Traversal

解题思路

中序遍历时要求先输出左树的中序遍历,很自然的涉及到堆栈的先入后出的特征。我们用堆栈将左节点与当前节点压入;在压出的时候去检查当前节点的右树节点,如果有则将右树节点的左节点与当前节点压入;如此反复,直至堆栈为空。

复杂度分析

时间复杂度:$O(n)$,$n$为节点数量
空间复杂度:$O(h)$,$h$为树深

代码

/**
 * 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 inorderTraversal(TreeNode* root) {
        vector rt;
        stack st;
        TreeNode *cur = root;
        while(cur != NULL) {
            st.push(cur);
            cur = cur->left;
        }
        while(!st.empty()) {
            cur = st.top(); st.pop();
            rt.push_back(cur->val);
            cur = cur->right;
            while(cur != NULL) {
                st.push(cur);
                cur = cur->left;
            }
        }
        return rt;
    }
};

广告区域

本人和小伙伴们承接各种软件项目,有需求的可以联系我们。
QQ: 2992073083

你可能感兴趣的:(LeetCode - 0092 - Binary Tree Inorder Traversal)