617.合并二叉树
主要思路:关键是如何将俩颗树进行合的操作,只对树1,进行修改
class Solution {
public:
TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
if (root1 == NULL) return root2;
if (root2 == NULL) return root1;
root1 -> val += root2 -> val;
root1 -> left = mergeTrees (root1->left,root2->left);
root1 -> right = mergeTrees (root1->right,root2->right);
return root1;
}
};
700.二叉搜索树中的搜索
主要思路:明白什么是搜索树,才是关键
//递归写法
class Solution {
public:
TreeNode* searchBST(TreeNode* root, int val) {
if (root == NULL||root->val == val) return root;
if (root->val > val) return searchBST (root->left,val);
if (root->val < val) return searchBST (root->right,val);
return NULL;
}
};
//迭代写法
class Solution {
public:
TreeNode* searchBST(TreeNode* root, int val) {
while (root !=NULL) {
if (root->val > val) root = root->left;
else if (root->val < val) root = root->right;
else return root;
}
return NULL;
}
};
98.验证二叉搜索树
主要思路:采用双指针的思路,在递归的过程中不断返回数值
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;
}
};