● 654.最大二叉树
先找最大值,然后最大值作为分割,作为root;左右分别重复,依次把“root”放入。
构建二叉树采用前序
class Solution {
private:TreeNode* traversal(vector<int>& nums, int left, int right) {if (left >= right) return NULL;int maxValueIndex = left;for (int i = left + 1; i < right; ++i) {if (nums[i] > nums[maxValueIndex]) maxValueIndex = i;}TreeNode* root = new TreeNode(nums[maxValueIndex]);root->left = traversal(nums, left, maxValueIndex);root->right = traversal(nums, maxValueIndex + 1, right);return root;}
public:TreeNode* constructMaximumBinaryTree(vector<int>& nums) {return traversal(nums, 0, nums.size());}
};
● 617.合并二叉树
class Solution {
public:TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {if (t1 == NULL) return t2;if (t2 == NULL) return t1;TreeNode* root = new TreeNode(0);root->val = t1->val + t2->val;root->left = mergeTrees(t1->left, t2->left);root->right = mergeTrees(t1->right, t2->right);return root;}
};
● 700.二叉搜索树中的搜索
搜索树--中序遍历
class Solution {
public:TreeNode* searchBST(TreeNode* root, int val) {if (root == NULL || root->val == val) return root;TreeNode* result = NULL;if (root->val > val) result = searchBST(root->left, val);if (root->val < val) result = searchBST(root->right, val);return result;}
};
● 98.验证二叉搜索树
class Solution {
private:vector<int> vec;void traversal(TreeNode* root) {if (root == NULL) return;traversal(root->left);vec.push_back(root->val);traversal(root->right);}public:bool isValidBST(TreeNode* root) {vec.clear();traversal(root);for (int i = 1; i < vec.size(); i++) {if (vec[i] <= vec[i - 1]) return false;}return true;}
};