class Solution {
public:
TreeNode* constructMaximumBinaryTree(vector<int>& nums)
{
if (nums.size()==0) return nullptr;
int maxnode = 0;
for (int i=0; i<nums.size(); i++)
{
if (nums[i]>nums[maxnode]) maxnode=i;
}
TreeNode* root = new TreeNode(nums[maxnode]);
if (nums.size()==1) return root;
vector<int> left = vector<int>(nums.begin(), nums.begin()+maxnode);
vector<int> right = vector<int>(nums.begin()+maxnode+1, nums.end());
root->left = constructMaximumBinaryTree(left);
root->right = constructMaximumBinaryTree(right);
return root;
}
};
class Solution {
public:
TreeNode* dfs(TreeNode* cur1, TreeNode* cur2)
{
if (cur1==nullptr && cur2==nullptr) return nullptr;
if (cur1!=nullptr && cur2!=nullptr)
{
cur1->val += cur2->val;
}
if (cur1==nullptr && cur2!=nullptr)
{
return cur2;
}
if (cur1!=nullptr && cur2!=nullptr)
{
cur1->left = dfs(cur1->left, cur2->left);
cur1->right = dfs(cur1->right, cur2->right);
}
return cur1;
}
TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2)
{
if (root1==nullptr && root2==nullptr) return nullptr;
if (root1 != nullptr && root2==nullptr) return root1;
if (root1==nullptr && root2!=nullptr) return root2;
// if (root1!=nullptr && root2!=nullptr) root1->val += root2->val;
dfs(root1, root2);
return root1;
}
};
class Solution {
public:
TreeNode* ans;
void dfs(TreeNode* cur, int val)
{
if (cur->val == val) ans = cur;
if (cur->left==nullptr && cur->right==nullptr) return;
if (cur->left!=nullptr) dfs(cur->left, val);
if (cur->right!=nullptr) dfs(cur->right, val);
}
TreeNode* searchBST(TreeNode* root, int val)
{
dfs(root, val);
return ans;
}
};
没想到中序遍历,不应该,二叉搜索树的概念要清晰
class Solution {
public:
long long maxVal = LONG_MIN;
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;
}
};