654. 最大二叉树
class Solution {
public:
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
if (nums.size()==0)
return nullptr;
int max_num=INT_MIN, max_idx;
for(int i=0; i<nums.size(); i++){
if(nums[i]>max_num){
max_num=nums[i];
max_idx=i;
}
}
TreeNode* root=new TreeNode(max_num);
vector<int> left(nums.begin(),nums.begin()+max_idx);
vector<int> right(nums.begin()+max_idx+1,nums.end());
root->left=constructMaximumBinaryTree(left);
root->right=constructMaximumBinaryTree(right);
return root;
}
};
617. 合并二叉树
class Solution {
public:
TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
if(root1==nullptr)
return root2;
if(root2==nullptr)
return root1;
TreeNode* root=new TreeNode(root1->val+root2->val);
root->left=mergeTrees(root1->left,root2->left);
root->right=mergeTrees(root1->right,root2->right);
return root;
}
};
700. 二叉搜索树中的搜索
class Solution {
public:
TreeNode* searchBST(TreeNode* root, int val) {
while(root&&root->val!=val){
if(val>root->val){
root=root->right;
}
else
root=root->left;
}
return root;
}
};
98. 验证二叉搜索树
class Solution {
public:
long last=LONG_MIN;
bool isValidBST(TreeNode* root) {
if(root==nullptr)
return true;
if(!isValidBST(root->left))
return false;
if(root->val<=last)
return false;
last=root->val;
return isValidBST(root->right);
}
};
搜索树中序遍历一定递增,利用last保存上一个节点,判断是否满足递增要求。