let700
//给定二叉搜索树(BST)的根节点
// root 和一个整数值
// val。
//
// 你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回
// null 。
//
//
//
// 示例 1:
//
//
//
//
//
//输入:root = [4,2,7,1,3], val = 2
//输出:[2,1,3]
//
//
// 示例 2:
//
//
//输入:root = [4,2,7,1,3], val = 5
//输出:[]
//
//
//
//
// 提示:
//
//
// 数中节点数在 [1, 5000] 范围内
// 1 <= Node.val <= 10⁷
// root 是二叉搜索树
// 1 <= val <= 10⁷
//
//
// Related Topics 树 二叉搜索树 二叉树 👍 350 👎 0
//leetcode submit region begin(Prohibit modification and deletion)
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
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;
}
};
//leetcode submit region end(Prohibit modification and deletion)
//给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
//
// 有效 二叉搜索树定义如下:
//
//
// 节点的左子树只包含 小于 当前节点的数。
// 节点的右子树只包含 大于 当前节点的数。
// 所有左子树和右子树自身必须也是二叉搜索树。
//
//
//
//
// 示例 1:
//
//
//输入:root = [2,1,3]
//输出:true
//
//
// 示例 2:
//
//
//输入:root = [5,1,4,null,null,3,6]
//输出:false
//解释:根节点的值是 5 ,但是右子节点的值是 4 。
//
//
//
//
// 提示:
//
//
// 树中节点数目范围在[1, 10⁴] 内
// -2³¹ <= Node.val <= 2³¹ - 1
//
//
// Related Topics 树 深度优先搜索 二叉搜索树 二叉树 👍 1843 👎 0
//leetcode submit region begin(Prohibit modification and deletion)
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
TreeNode *pre = NULL;//我们在这里定义我们的前面的节点
bool isValidBST(TreeNode *root) {
//递归的终止条件
if (root == NULL) {
return true;
}
//验证是否是平衡二叉树
bool leftNode = isValidBST(root->left);
//中序处理逻辑
if (pre != NULL && pre->val >= root->val) { //这个不为空的判断其实也是很重要的
return false;
}
pre = root;
bool rightNode = isValidBST(root->right);
return leftNode && rightNode;
}
};
//leetcode submit region end(Prohibit modification and deletion)