中序遍历的递归以及迭代版本
记录一下\(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;
}
};