二叉搜索树
定义
每个节点中的值必须大于(或等于)存储在其左侧子树中的任何值。
每个节点中的值必须小于(或等于)存储在其右子树中的任何值。
应用
验证二叉搜索树
给你一个二叉树的根节点
root,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:
节点的左子树只包含 小于 当前节点的数。
节点的右子树只包含 大于 当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
public bool IsValidBST(TreeNode root)
{
return IsValidBST_DivideAndConquer(root, long.MinValue, long.MaxValue);
}
bool IsValidBST_DivideAndConquer(TreeNode? p, long? min, long? max)
{
if (p?.val == null)
{
return true;
}
// 返回条件
if (p.val <= min || max <= p.val)
{
return false;
}
// 分治(Divide)
var left = IsValidBST_DivideAndConquer(p.left, min, p.val);
var right = IsValidBST_DivideAndConquer(p.right, p.val, max);
// 合并结果(Conquer)
return left && right;
}二叉搜索树中的插入操作
给定二叉搜索树(BST)的根节点
root和要插入树中的值value,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。
思路:找到最后一个叶子节点满足插入条件即可
删除二叉搜索树中节点
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。
一般来说,删除节点可分为两个步骤:
首先找到需要删除的节点;
如果找到了,删除它。
平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
练习
最后更新于