654.最大二叉树
思路解析:代码随想录
总结:中左右序列,先构造中间节点,然后递归左子树和右子树。
容易出问题的在于左闭右开
617.合并二叉树
思路解析:代码随想录
总结:前序遍历。左子树为空的时候返回右子树,右子树为空的时候返回左子树。递归
700.二叉搜索树中的搜索
思路解析:不愧是搜索树,这次搜索有方向了!| LeetCode:700.二叉搜索树中的搜索_哔哩哔哩_bilibili
总结:递归结束条件,忽略了如果root为空的情况。
递归函数的返回值是什么? 是 左子树如果搜索到了val,要将该节点返回。 如果不用一个变量将其接住,那么返回值不就没了。
所以要 result = searchBST(root->left, val);另一种写法:
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;
}
};
98.验证二叉搜索树
思路解析:代码随想录
总结:
- 陷阱1 不能单纯的比较左节点小于中间节点,右节点大于中间节点就完事了。
建议避免 初始化最小值,如下方法取到最左面节点的数值来比较。
代码如下:
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;
}
};