30 Day Challenge Day 20 | Leetcode 94. Binary Tree Inorder Traversal

题解

Medium

Tree, Stack

几天之内再次做了一遍,思路依旧会卡壳。看来在栈的运用上还是一个难点,毕竟这个倒序的数据结构比起队列并不如那么直观。不过还是很重要。

思路就是先把左节点依次压入栈中,直到最左边的节点,那么以当前节点为根节点,排序就比较容易了,这和遍历方向是一致的所以,可以把当前节点直接放进结果数组中,然后再移动到右节点,,重复上面过程。

class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> ret;

        stack<TreeNode*> st;
        
        TreeNode* node = root;
        
        while(node || !st.empty()) {
            TreeNode* temp = node;
            while(temp) {
                st.push(temp);
                temp = temp->left;
            }
            TreeNode* t = st.top();
            st.pop();
            ret.push_back(t->val);
            node = t->right;
        }
        
        return ret;
    }
};
原文地址:https://www.cnblogs.com/casperwin/p/13780148.html