中序遍历的递归以及迭代版本

记录一下\(BST\)中序遍历的迭代版本以及递归版本,并且在上述过程中记录当前节点的前一个节点,是关于\(leetcode\) 530 的题解

迭代版本

很早就注意到了前中后序遍历的迭代版本,但是还是看一次忘一次😢

class Solution {
public:
    int getMinimumDifference(TreeNode* root) {
        stack<TreeNode*> st;
        TreeNode* cur = root;
        TreeNode* pre = NULL;
        int result = INT_MAX;
        while (cur != NULL || !st.empty()) {
            if (cur != NULL) { // 指针来访问节点,访问到最底层
                st.push(cur); // 将访问的节点放进栈
                cur = cur->left;                // 左
            } else {
                cur = st.top();
                st.pop();
                if (pre != NULL) {
                    result = min(result, cur->val - pre->val); // 中
                }
                pre = cur;
                cur = cur->right;               // 右
            }
        }
        return result;
    }
};

递归版本

class Solution {
private:
int result = INT_MAX;
TreeNode* pre;
void traversal(TreeNode* cur) {
    if (cur == NULL) return;
    traversal(cur->left);
    if (pre != NULL){
        result = min(result, cur->val - pre->val);
    }
    pre = cur; // 记录前一个
    traversal(cur->right);
}
public:
    int getMinimumDifference(TreeNode* root) {
        traversal(root);
        return result;
    }
};
posted @ 2020-10-12 10:36  wsl-hitsz  阅读(120)  评论(0编辑  收藏  举报