代码随想录day20 LeetCode 654. 最大二叉树 617. 合并二叉树 700. 二叉搜索树中的搜索 98. 验证二叉搜索树
654. 最大二叉树
class Solution { public: TreeNode* constructMaximumBinaryTree(vector<int>& nums) { if(nums.size()==1){ return new TreeNode(nums[0]); } int maxvalue=0; int index=0; for(int i=0;i<nums.size();i++){ if(maxvalue<nums[i]){ maxvalue=nums[i]; index=i; } } TreeNode* node=new TreeNode(maxvalue); if(index>0){ vector<int>left(nums.begin(),nums.begin()+index); node->left= constructMaximumBinaryTree(left); } if(index<nums.size()-1){ vector<int>right(nums.begin()+index+1,nums.end()); node->right= constructMaximumBinaryTree(right); } return node; } };
617. 合并二叉树
class Solution { public: TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) { if(root1==NULL&&root2==NULL)return NULL; if(root1!=NULL&&root2==NULL)return root1; if(root1==NULL&&root2!=NULL)return root2; TreeNode *root=new TreeNode(root2->val+root1->val); root->left= mergeTrees(root1->left,root2->left); root->right= mergeTrees(root1->right,root2->right); return root; } };
700. 二叉搜索树中的搜索
class Solution { public: TreeNode* searchBST(TreeNode* root, int val) { TreeNode*node=root; while(node->val!=val){ if(node->val<val)node=node->right; else if(node->val>val)node=node->left; if(node==NULL)return NULL; } return node; } };
98. 验证二叉搜索树
二叉搜索树在中序遍历时是有序数组,可利用这个特性来进行验证,不断存储节点值,如果小于前一节点值则返回0。注意oj上的数据访问,包含了int的最小值,所以要用Longlong
class Solution { public: long long maxVal=LONG_MIN; bool isValidBST(TreeNode* root) { TreeNode* node=root; if(node==NULL)return 1; bool left= isValidBST(root->left); if(maxVal<root->val)maxVal=root->val; else return 0; bool right= isValidBST(root->right); return left&&right; } };
浙公网安备 33010602011771号