- 二叉搜素树的最小绝对差
/**
- 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:
Solution()
:min(INT_MAX), pre(nullptr)
{
}
void traversal(TreeNode cur)
{
if(cur == nullptr)
{
return;
}
traversal(cur->left);
if(pre != nullptr)
{
if(min > cur->val - pre->val)
{
min = cur->val - pre->val;
}
}
pre = cur;
traversal(cur->right);
}
int getMinimumDifference(TreeNode root)
{
traversal(root);
return min;
}
private:
int min;
TreeNode *pre;
};
- 二叉搜索树中的众数
/**
-
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:
void traversal(TreeNode *cur)
{
if(cur == nullptr)
{
return;
}
traversal(cur->left);
if(pre != nullptr)
{
if(pre->val == cur->val)
{
++num;if(num > max) { max = num; value.clear(); value.push_back(pre->val); } if(num == max) { value.push_back(pre->val); } } else { num = 1; } } else { num = 1; } pre = cur; traversal(cur->right);
}
vectorfindMode(TreeNode* root) {
value.clear();
traversal(root);
return value;
}
private:
int max = 0;
int num = 0;
vectorvalue;
TreeNode *pre = nullptr;
};
-
二叉树的最近公共祖先
/**
- Definition for a binary tree node.
- struct TreeNode {
-
int val;
-
TreeNode *left;
-
TreeNode *right;
-
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
- };
/
class Solution
{
public:
TreeNode traversal(TreeNode *root, TreeNode p, TreeNode q)
{
if(root == nullptr)
{
return nullptr;
}
if(root == p || root == q)
{
return root;
}
TreeNode left = traversal(root->left, p, q);
TreeNode right = traversal(root->right, p, q);
if(left != nullptr && right != nullptr)
{
return root;
}
else if(left != nullptr && right == nullptr)
{
return left;
}
else if(left == nullptr && right != nullptr)
{
return right;
}
else
{
return nullptr;
}
}
TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q)
{
return traversal(root, p ,q);
}
};