题目链接:654.最大二叉树
重点在于数组是如何分割的,与前序遍历中序遍历数组构建树相同。
class Solution {
public:
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
if(nums.empty()) return nullptr;
int max_val = nums[0], idx = 0;
for(int i = 1; i < nums.size(); i++) {
if(nums[i] > max_val){
idx = i;
max_val = nums[i];
}
}
TreeNode* curr = new TreeNode(nums[idx]);
vector<int> left_tree(nums.begin(), nums.begin() + idx);
vector<int> right_tree(nums.begin() + idx + 1, nums.end());
curr->left = constructMaximumBinaryTree(left_tree);
curr->right = constructMaximumBinaryTree(right_tree);
return curr;
}
};
题目链接:617.合并二叉树
class Solution {
public:
TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
if(root1 == nullptr) return root2;
if(root2 == nullptr) 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 == nullptr) return nullptr;
else if(root->val == val) return root;
else if(root->val > val) return searchBST(root->left, val);
else return searchBST(root->right, val);
}
};
题目链接:98.验证二叉搜索树
二叉搜索树的中序遍历为一个递增数组。
class Solution {
public:
bool isValidBST(TreeNode* root) {
vector<int> inorder;
inorderTraversal(root, inorder);
for(int i = 0, j = 1; j < inorder.size(); i++, j++) {
if(inorder[i] >= inorder[j]) return false;
}
return true;
}
void inorderTraversal(TreeNode* node, vector<int>& vec){
if(node == nullptr) return;
inorderTraversal(node->left, vec);
vec.push_back(node->val);
inorderTraversal(node->right, vec);
}
};