LeetCode654
题目:
解法:
class Solution {
public:
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
int max = nums[0];
int maxpos = 0;
for(int i = 0; i < nums.size();i++){
if(max < nums[i]){
max = nums[i];
maxpos = i;
}
}
TreeNode* root = new TreeNode(max);
if(nums.size() == 1) return root;
vector<int> lefttree(nums.begin(),nums.begin() + maxpos);
vector<int> righttree(nums.begin() + maxpos + 1, nums.end());
if(lefttree.size() > 0) root -> left = constructMaximumBinaryTree(lefttree);
if(righttree.size() > 0) root -> right = constructMaximumBinaryTree(righttree);
return root;
}
};
Leetcode617
题目:
解法:
class Solution {
public:
TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
if(root1 == NULL && root2 == NULL) return NULL;
TreeNode* root;
if(root1 == NULL && root2) {
root = new TreeNode(root2 -> val);
root -> left = mergeTrees(root2 -> left ,NULL);
root -> right = mergeTrees(root2 -> right ,NULL);
return root;
}
if(root1 && root2 == NULL) {
root = new TreeNode(root1 -> val);
root -> left = mergeTrees(root1 -> left ,NULL);
root -> right = mergeTrees(root1 -> right ,NULL);
return root;
}
root = new TreeNode(root1 -> val + root2 -> val);
root -> left = mergeTrees(root1 -> left ,root2 -> left);
root -> right = mergeTrees(root1 -> right ,root2 -> right);
return root;
}
};
解法2:(递归)
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;
}
};
LeetCode 700
题目:
解法:
class Solution {
public:
int value = 0;
TreeNode* result;
TreeNode* searchBST(TreeNode* root, int val) {
if(value == 1) return result;
if(root -> val == val){
value = 1;
result = root;
return result;
}
if(root -> left && root -> val > val ) return searchBST(root -> left, val);
if(root -> right && root -> val < val) return searchBST(root -> right, val);
return NULL;
}
};
Leetcode 98
解法:
class Solution {
public:
vector<int> vec;
void middle(TreeNode* root){
if(root == NULL) return;
if(root -> left) middle(root -> left);
vec.push_back(root -> val);
if(root -> right) middle(root -> right);
return;
}
bool isValidBST(TreeNode* root) {
middle(root);
for(int i = 0;i < vec.size() - 1;i++){
if(vec[i] >= vec[i+1]) return false;
}
return true;
}
};
递归法:
class Solution {
public:
long long maxVal = LONG_MIN; // 因为后台测试数据中有int最小值
bool isValidBST(TreeNode* root) {
if (root == NULL) return true;
bool left = isValidBST(root->left);
// 中序遍历,验证遍历的元素是不是从小到大
if (maxVal < root->val) maxVal = root->val;
else return false;
bool right = isValidBST(root->right);
return left && right;
}
};