力扣 530. 二叉搜索树的最小绝对差 / 783. 二叉搜索树节点最小距离

题目来源

530:https://leetcode.cn/problems/minimum-absolute-difference-in-bst/description/

783: https://leetcode.cn/problems/minimum-distance-between-bst-nodes/

力扣 530. 二叉搜索树的最小绝对差 / 783. 二叉搜索树节点最小距离_第1张图片 

 力扣 530. 二叉搜索树的最小绝对差 / 783. 二叉搜索树节点最小距离_第2张图片

 C++题解1:递归法,中序遍历。通过中序遍历将二叉搜索树转化成递增数组,再寻找最小值就简单得多。

class Solution {
public:
    void zhongxu(TreeNode* node, vector& nums) {
        if(!node) return;
        zhongxu(node->left, nums);
        nums.push_back(node->val);
        zhongxu(node->right, nums);
        return;
    }
    int getMinimumDifference(TreeNode* root) {
        vector nums;
        zhongxu(root, nums);
        int len = nums.size();
        int res = nums[1] - nums[0];
        for(int i = 2; i < len; i++) {
            if(res > nums[i] - nums[i-1]) res = nums[i] - nums[i-1];
        }
        return res;
    }
};

C++题解2:在中序遍历中直接计算,用pre记录上一节点,就不用转换成数组。

class Solution {
private:
int result = INT_MAX;
TreeNode* pre = NULL;
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;
    }
};

C++题解3:迭代法,中序遍历。

class Solution {
public:
    int getMinimumDifference(TreeNode* root) {
        stack 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;
    }
};

 

你可能感兴趣的:(开始C++吧,leetcode,算法,c++,数据结构,二叉树)