530.二叉搜索树的最小绝对差
给你一个二叉搜索树的根节点 root
,返回 树中任意两不同节点值之间的最小差值 。
差值是一个正数,其数值等于两值之差的绝对值。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
TreeNode* pre = NULL;
int m = 100000;
void get(TreeNode* T)
{
if(T == NULL) return;
get(T->left);
if(pre&&T) m = min(m,T->val - pre->val);
pre = T;
get(T->right);
}
int getMinimumDifference(TreeNode* root) {
get(root);
return m;
}
};
- 树的双指针法
501.二叉搜索树中的众数
给你一个含重复值的二叉搜索树(BST)的根节点 root
,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。
如果树中有不止一个众数,可以按 任意顺序 返回。
假定 BST 满足如下定义:
- 结点左子树中所含节点的值 小于等于 当前节点的值
- 结点右子树中所含节点的值 大于等于 当前节点的值
- 左子树和右子树都是二叉搜索树
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int count = 1,max = 1;
vector<int> res;
TreeNode* pre = NULL;
void get(TreeNode* T)
{
if(T == NULL) return;
get(T->left);
if((T&&pre)&&T->val == pre->val) count++;
if((T&&pre)&&T->val != pre->val) count = 1;
{
if(count == max) res.push_back(T->val);
if(count > max)
{
res.clear();
max = count;
res.push_back(T->val);
}
}
pre = T;
get(T->right);
}
vector<int> findMode(TreeNode* root) {
//res.push_back(root->val);
get(root);
return res;
}
};
236. 二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
代码可见:代码随想录 (programmercarl.com)
- 回溯(一定形式的从下向上遍历)