代码随想录打卡第十五天
题目链接/文章讲解:代码随想录
视频讲解:又是构造二叉树,又有很多坑!| LeetCode:654.最大二叉树_哔哩哔哩_bilibili
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:TreeNode* traversal(vector<int>& nums){if(nums.size()==0){return NULL;}int maxValue = *max_element(nums.begin(),nums.end());//找到当前数组的最大值int index=0;for(index;index<nums.size();index++){if(maxValue==nums[index]){break;}}TreeNode* node=new TreeNode(0);node->val=maxValue;vector<int> left(nums.begin(),nums.begin()+index);//做数组vector<int> right(nums.begin()+index+1,nums.end());//右数组node->left=traversal(left);node->right=traversal(right);return node;}TreeNode* constructMaximumBinaryTree(vector<int>& nums) {TreeNode* node=traversal(nums);return node;}
};
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left),* right(right) {}* };*/
class Solution {
public:TreeNode* traversal(TreeNode* root1, TreeNode* root2) {if (root1 == NULL) {return root2;}if (root2 == NULL) {return root1;}root1->val = root1->val + root2->val; // 结点值相加;root1->left = traversal(root1->left, root2->left);root1->right = traversal(root1->right, root2->right);return root1;}TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {return traversal(root1, root2);}
};
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:TreeNode* traversal(TreeNode* node,int val){if(node==NULL){return NULL;}if(node->val==val){return node;}//使用搜索树的性质if(node->val<val) //查找值>结点值 遍历右子树,因为左子树肯定不符合{node=traversal(node->right,val);}else//查找值<结点值 遍历左子树,因为右子树肯定不符合{node=traversal(node->left,val);}return node;}TreeNode* searchBST(TreeNode* root, int val) {return traversal(root,val);}
};
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:TreeNode* pre = NULL; // 用来记录前一个节点bool isValidBST(TreeNode* root) {if (root == NULL) return true;bool left = isValidBST(root->left);if (pre != NULL && pre->val >= root->val) return false;pre = root; // 记录前一个节点bool right = isValidBST(root->right);return left && right;}
};