654.最大二叉树
代码随想录链接:代码随想录 (programmercarl.com)
和昨天根据中序和后序构造二叉树有点像
构造树一般采用的是前序遍历,因为先构造中间节点,然后递归构造左子树和右子树
class Solution {
public:
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
TreeNode* node= new TreeNode(0);
if(nums.size()==1){
node->val=nums[0];
return node;
}
int max=0;
int index=0;
for(int i=0;i<nums.size();i++){
if(nums[i]>max){
max=nums[i];
index=i;
}
}
node->val=max;
if (index > 0) {
vector<int> newVec(nums.begin(), nums.begin() + index);
node->left = constructMaximumBinaryTree(newVec);
}
if (index < (nums.size() - 1)) {
vector<int> newVec(nums.begin() + index + 1, nums.end());
node->right = constructMaximumBinaryTree(newVec);
}
return node;
}
};
617.合并二叉树
代码随想录链接:代码随想录 (programmercarl.com)
class Solution {
public:
TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
if(root1==NULL) return root2;
if(root2==NULL) return root1;
root1->val+=root2->val;
root1->left=mergeTrees(root1->left,root2->left);
root1->right=mergeTrees(root1->right,root2->right);
return root1;
}
};
700.二叉搜索树中的搜索
class Solution {
public:
TreeNode* searchBST(TreeNode* root, int val) {
if(root==NULL || root->val==val) return root;
TreeNode* result=NULL;
if(root->val>val){
result=searchBST(root->left,val);
}
if(root->val<val){
result=searchBST(root->right,val);
}
return result;
}
};
98.验证二叉搜索树
中序遍历,但是中序遍历的代码细节忘记了很多,出了很多错,复习还是有必要的。
class Solution {
public:
void inorder(TreeNode* root,vector<int>& result){
if(root==NULL) return;
inorder(root->left,result);
result.push_back(root->val);
inorder(root->right,result);
}
bool isValidBST(TreeNode* root) {
vector<int> result;
inorder(root,result);
for(int i=1;i<result.size();i++){
if(result[i]<=result[i-1]){
return false;
}
}
return true;
}
};