LeetCode 654. 最大二叉树
class Solution {
public:
TreeNode* traversal(vector<int>& nums){
int i=0;
for(int j=0;j<nums.size();j++){
if(nums[j]>nums[i]){
i=j;
}
}
TreeNode* node=new TreeNode(nums[i]);
if(i!=0){
vector<int> left(nums.begin(),nums.begin()+i);
node->left=traversal(left);
}
if(i!=nums.size()-1){
vector<int> right(nums.begin()+i+1,nums.end());
node->right=traversal(right);
}
return node;
}
TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
return traversal(nums);
}
};
这题思路比较简单
LeetCode 617. 合并二叉树
class Solution {
public:
TreeNode* traversal(TreeNode* node1, TreeNode* node2) {
if (node1 == NULL && node2 == NULL) return NULL;
TreeNode* newNode = new TreeNode(0); // 创建新节点
if (node1 != NULL) newNode->val += node1->val;
if (node2 != NULL) newNode->val += node2->val;
newNode->left = traversal(node1 ? node1->left : NULL, node2 ? node2->left : NULL);
newNode->right = traversal(node1 ? node1->right : NULL, node2 ? node2->right : NULL);
return newNode;
}
TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
return traversal(root1,root2);
}
};
LeetCode 700. 二叉搜索树中的搜索
class Solution {
public:
TreeNode* value;
TreeNode* traversal(TreeNode* root,int val){
if(root->val==val){
value=root;
}
if(root->left)traversal(root->left,val);
if(root->right)traversal(root->right,val);
return root;
}
TreeNode* searchBST(TreeNode* root, int val) {
traversal(root,val);
return value;
}
};
我这纯是遍历所有二叉树节点,没体现出特点。
LeetCode 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(); // 不加这句在leetcode上也可以过,但最好加上
traversal(root);
for (int i = 1; i < vec.size(); i++) {
// 注意要小于等于,搜索树里不能有相同元素
if (vec[i] <= vec[i - 1]) return false;
}
return true;
}
};