最大二叉树
力扣题目地址
class Solution {
public:
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
if(nums.empty())
return nullptr;
int index = 0;
for(int i = 0; i < nums.size(); i++){
if(nums[i] > nums[index]){
index = i;
}
}
TreeNode* root = new TreeNode(nums[index]);
if(index > 0){
vector<int> l_nums(nums.begin(), nums.begin() + index);
root->left = constructMaximumBinaryTree(l_nums);
}
if(index < nums.size() - 1){
vector<int> r_nums(nums.begin() + index + 1, nums.end());
root->right = constructMaximumBinaryTree(r_nums);
}
return root;
}
};
合并二叉树
力扣题目链接
class Solution {
public:
TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
if(!root1 && !root2)
return nullptr;
if(root1 && root2){
TreeNode *root = new TreeNode(root1->val + root2->val);
root->left = mergeTrees(root1->left, root2->left);
root->right = mergeTrees(root1->right, root2->right);
return root;
}
return root1 ? root1 : root2;
}
};
二叉搜索树中的搜索
力扣题目地址
class Solution {
public:
TreeNode* searchBST(TreeNode* root, int val) {
if(!root) return nullptr;
if(root->val == val)
return root;
else if(root->val < val){
return searchBST(root->right, val);
}
else{
return searchBST(root->left, val);
}
}
};
验证二叉搜索树
力扣题目链接
class Solution {
public:
// 记录遍历的值, 案例中存在INT_MIN
long minValue = INT64_MIN;
bool isValidBST(TreeNode* root) {
return inorder(root);
}
//l-m-r中序遍历 单调递增
bool inorder(TreeNode* root){
if(root->left && !inorder(root->left))
return false;
if(root->val <= minValue)
return false;
else{
minValue = root->val;
}
if(root->right && !inorder(root->right))
return false;
return true;
}
};