代码随想录二刷 Day21

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

一种简单的写法是中序遍历输出成数组,然后在数组内判断递增;另一种就是下面这种写法;

class Solution {
public:

    int result = 100000;
    TreeNode* previous = NULL;

    void traversal(TreeNode* cur) { //左中右遍历的时候这个搜索二叉树就是一个递增数列
        if (cur == NULL) return;
        traversal(cur->left);
        if (previous != NULL) {  //这句话是防止下面那句话操作空指针的val,同时也确保了在叶子结点便利的时候不会进行减法操作
            result = min(result, cur->val - previous->val);
        }
        previous = cur;  //注意这句话要放在if之外
        traversal(cur->right);
    }

    int getMinimumDifference(TreeNode* root) {
        traversal(root); 
        return result;
    }
};

501.二叉搜索树中的众数

 */
class Solution {
public:
    int count;
    int maxcount;
    TreeNode *pre = NULL;
    vector<int> result;

    void searchBST(TreeNode* root){
        if (root == NULL) return;
        searchBST(root->left);
        if (pre == NULL) {
            count = 1;
        } else if (pre->val == root->val) {
            count ++;
        }else {
            count = 1;
        }
        pre = root;
        if (count == maxcount) {
            result.push_back(root->val);
        }
        if(count > maxcount) {
            maxcount = count;
            result.clear();
            result.push_back(root->val);
        }
        searchBST(root->right);
    }    

    vector<int> findMode(TreeNode* root) {
      count =0;
      maxcount=0;
      searchBST(root);
      return result;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值