二叉搜索树的最小绝对差(迭代法中序遍历巩固)

力扣题目链接(opens new window)

给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。

示例:

530二叉搜索树的最小绝对差

提示:树中至少有 2 个节点。

思路

就还是迭代法来中序遍历

设定一个最小值(初始值为INT_MAX),用当前节点值来和前一节点值作差,结果与最小值比较并更新最小值,遍历结束返回最小值即可。

代码

class Solution {
public:
    int minRes = INT_MAX; 
    int getMinimumDifference(TreeNode* root) {
        //定义栈
        stack<TreeNode*> st;
        //定义两个指针指向当前节点和前一节点
        TreeNode* cur = root;
        TreeNode* pre = NULL;
        while(cur != NULL || !st.empty()){
            if(cur != NULL){
                st.push(cur);//压栈
                cur = cur->left;//继续向左遍历
            }else{
                cur = st.top();//取出节点
                st.pop();
                if(pre != NULL && (cur->val - pre->val) < minRes) minRes = cur->val - pre->val;//更新最小值
                //更新pre
                pre = cur;
                cur = cur->right;
            }
        }
        return minRes;
    }
};

注意点

1、迭代法下的中序遍历与前序、后序遍历不同,注意区别记忆

​ 迭代法下的中序遍历需要使用双指针来实现回溯

2、在使用迭代法进行中序遍历时,栈中的元素的是可以为空的

​ 只要当前的节点还不为空即可(这意味着某一方向还没有遍历到最底层)

因此在while循环时不要漏了对当前节点是否为空的判断