代码随想录二刷 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 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 findMode(TreeNode* root) {
      count =0;
      maxcount=0;
      searchBST(root);
      return result;
    }
};

你可能感兴趣的:(算法)