530.二叉搜索树的最小绝对差
public:
int getMinimumDifference(TreeNode* root) {
if(root ==NULL) return -1;
int left, right;
left = getMinimumDifference(root->left);
if(pre){
res = (root->val - pre->val < res) ? root->val - pre->val : res;
}
pre = root;
right = getMinimumDifference(root->right);
return res;
}
private:
TreeNode* pre = NULL;
int res = INT_MAX;
这里面其实有个注意的点,其实不设置left和right也能过,而且最好是整个中序遍历的额外函数,用一个void函数看的更好理解。
501.二叉搜索树中的众数
public:
int count = 1;
int maxcount = 0;
TreeNode* pre = NULL;
vector<int> res;
void func(TreeNode* cur){
if(cur == NULL) return;
func(cur->left);//中序的框架
if(pre){
if(cur->val == pre->val) count++;//当相同就计数自加
else count = 1;//如果不相同了那就从1重新计数
}
pre = cur;
if(count == maxcount) res.push_back(cur->val);//如果当前计数的数字数量一样多,就填充进去
if(count > maxcount ){//如果当前的count比之前的还大
maxcount = count;//那前面的就都不是众数了,直接清除,将当前的值添加进去
res.clear();
res.push_back(cur->val);
}
func(cur->right);
}
vector<int> findMode(TreeNode* root) {
func(root);
return res;
}
236. 二叉树的最近公共祖先
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if(root == NULL) return root;
if(root == p || root == q) return root;
TreeNode* left = lowestCommonAncestor(root->left, p, q);
TreeNode* right = lowestCommonAncestor(root->right, p, q);
if(!left && !right) return NULL;
else if(!left && right) return right;
else if(left && !right) return left;
else return root;
}