class Solution {
public:
TreeNode* traversal(vector<int>& nums, int start, int end) {
if (start == end) {
return nullptr;
}
int maxIndex = start, maxValue = nums[maxIndex];
for (int i = start; i < end; i++) {
if (nums[i] > nums[maxIndex]) {
maxIndex = i;
maxValue = nums[maxIndex];
}
}
TreeNode* root = new TreeNode(maxValue);
root->left = traversal(nums, start, maxIndex);
root->right = traversal(nums,maxIndex + 1, end);
return root;
}
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
return traversal(nums, 0, nums.size());
}
};
递归
class Solution {
public:
TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
if (!root1) {
return root2;
}
if (!root2) {
return root1;
}
root1->val += root2->val;
root1->left = mergeTrees(root1->left, root2->left);
root1->right = mergeTrees(root1->right, root2->right);
return root1;
}
};
迭代
class Solution {
public:
TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
if (!root1) {
return root2;
}
if (!root2) {
return root1;
}
queue<TreeNode*> que;
que.push(root1);
que.push(root2);
TreeNode* node1;
TreeNode* node2;
while (!que.empty()) {
node1 = que.front();
que.pop();
node2 = que.front();
que.pop();
node1->val += node2->val;
if (node1->left && node2->left) {
que.push(node1->left);
que.push(node2->left);
}
if (node1->right && node2->right) {
que.push(node1->right);
que.push(node2->right);
}
if (!node1->left && node2->left) {
node1->left = node2->left;
}
if (!node1->right && node2->right) {
node1->right = node2->right;
}
}
return root1;
}
};
递归
class Solution {
public:
TreeNode* searchBST(TreeNode* root, int val) {
if (!root || root->val == val){
return root;
}
if (root->val > val){
return searchBST(root->left, val);
} else {
return searchBST(root->right, val);
}
}
};
迭代
class Solution {
public:
TreeNode* searchBST(TreeNode* root, int val) {
while (root) {
if (root->val == val) {
return root;
}else if (root->val > val) {
root = root->left;
}else {
root = root->right;
}
}
return nullptr;
}
};
class Solution {
public:
long pre = LONG_MIN;
bool isValidBST(TreeNode* root) {
if (!root) {
return true;
}
//中序遍历
if (!isValidBST(root->left)) {
return false;
}
if (pre >= root->val) {
return false;
}else {
pre = root->val;
}
return isValidBST(root->right);
}
};
中序遍历(迭代)
class Solution {
public:
bool isValidBST(TreeNode* root) {
if (!root) {
return true;
}
stack<TreeNode*> sta;
TreeNode* pre = nullptr;
while (!sta.empty() || root) {
if (root) {
sta.push(root);
root = root->left;
}else {
root = sta.top();
sta.pop();
if (pre && pre->val >= root->val) {
return false;
}
pre = root;
root = root->right;
}
}
return true;
}
};