654.最大二叉树
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
if(nums.size() == 0) return NULL;//先处理空节点
int maxIndex;//接收最大值的下标
int maxval = INT_MIN;
for(int i = 0; i < nums.size(); ++i){
if(maxval < nums[i]){
maxval = nums[i];//更新最大值
maxIndex = i;
}
}
TreeNode* root = new TreeNode(nums[maxIndex]);//当拿到最大值后进行节点创建
if(nums.size() == 1) return root;//当nums划分的只剩一个的时候,说明此节点为叶子结点,到头了,那就return
vector<int> left(nums.begin(), nums.begin() + maxIndex);//左闭右开画出左边
vector<int> right(nums.begin() + maxIndex + 1, nums.end());//左闭右开画出右边
root->left = constructMaximumBinaryTree(left);//分别对左右各自处理
root->right = constructMaximumBinaryTree(right);
return root;
}
617.合并二叉树
TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
if(!root1 && !root2) return NULL;//可有可无,没有的话也是最后直接return
else if(!root1 && root2) return root2;
else if(root1 && !root2) return root1;
root1->val += root2->val;//将头结点相加
root1->left = mergeTrees(root1->left,root2->left);//处理左子树
root1->right = mergeTrees(root1->right,root2->right);//处理右子树
return root1;
}
700.二叉搜索树中的搜索
TreeNode* searchBST(TreeNode* root, int val) {
if(root == NULL) return root;
if(root->val == val) return root;
if(val > root->val){
return searchBST(root->right, val);
}else return searchBST(root->left, val);
}
98.验证二叉搜索树
TreeNode* pre = NULL;
bool isValidBST(TreeNode* root) {
if(root == NULL) return true;//空节点也是二叉树
bool left, right;
left = isValidBST(root->left);
if(pre != NULL){//当只有Pre节点指向叶子结点才比较
if(pre->val >= root->val) return false;
//这个判断不能写成true,必须要写false的情况
//因为若直接true,那么直接有一个满足就退出去了,不会在检查后面的
}
pre = root;
right = isValidBST(root->right);
return left && right;
}