自己AC过了,确实对递归理解深入了一些
class Solution {
public:
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
if(nums.empty()) return NULL;
if(nums.size() == 1) {
TreeNode* tmp = new TreeNode(nums[0]);
return tmp;
}
int max = nums[0];
int position = 0;
for(int i = 0;i < nums.size();i++) {
if(nums[i] > max) {
max = nums[i];
position = i;
}
}
TreeNode* node = new TreeNode(max);
vector<int> left(nums.begin(), nums.begin() + position);
vector<int> right(nums.begin() + position + 1, nums.end());
node->left = constructMaximumBinaryTree(left);
node->right = constructMaximumBinaryTree(right);
return node;
}
};
class Solution {
public:
TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
if(root1 == NULL) return root2;
if(root2 == NULL) return root1;
TreeNode* node = new TreeNode(root1->val + root2->val);
node->left = mergeTrees(root1->left, root2->left);
node->right = mergeTrees(root1->right, root2->right);
return node;
}
};
题目3:700. 二叉搜索树中的搜索 - 力扣(LeetCode)
二叉搜索树定义:左孩子小于节点,右孩子大于节点,且左右子树也符合 该规律
真的简单啊,其实整体思路没错,只是乱没想清楚
class Solution {
public:
TreeNode* searchBST(TreeNode* root, int val) {
if(root == NULL || root->val == val) return root;
TreeNode* reslut;
if(val > root->val) reslut = searchBST(root->right, val);
if(val < root->val) reslut = searchBST(root->left, val);
return reslut;
}
};
class Solution {
public:
TreeNode* searchBST(TreeNode* root, int val) {
while(root != NULL) {
if(val > root->val) root = root->right;
else if(val < root->val) root = root->left;
else {
return root;
}
}
return NULL;
}
};
题目4:98. 验证二叉搜索树 - 力扣(LeetCode)
class Solution {
public:
long long maxval = LONG_MIN;
bool isValidBST(TreeNode* root) {
if(root == NULL) return true;
bool left = isValidBST(root->left);
if(root->val > maxval) {
maxval = root->val;
}else return false;
bool right = isValidBST(root->right);
return left && right;
}
};