二叉搜索树操作集锦

本文介绍了二叉搜索树(BST)的概念及其基础操作,包括合法性判断、增、删、查。通过提供解决问题的框架思路,阐述了如何设计算法。以具体的代码示例展示如何在BST中查找、插入和删除节点,强调了利用BST特性优化算法的重要性。
摘要由CSDN通过智能技术生成

二叉树算法的设计的总路线:明确一个节点要做的事情,然后剩下的事抛给框架。

void traverse(TreeNode root) {
   
    // root 需要做什么?在这做。
    // 其他的不用 root 操心,抛给框架
    traverse(root.left);
    traverse(root.right);
}

PS:关于写算法的框架,是很重要的,直接决定了我们思考的方向,强烈建议先看看我的博客文章:学习数据结构的框架思维

举两个简单的例子体会一下这个思路,热热身。

1. 如何把二叉树所有的节点中的值加一?

void plusOne(TreeNode root) {
   
    if (root == null) return;
    root.val += 1;

    plusOne(root.left);
    plusOne(root.right);
}

2. 如何判断两棵二叉树是否完全相同?

boolean isSameTree(TreeNode root1, TreeNode root2) {
   
    // 都为空的话,显然相同
    if (root1 == null && root2 == null) return true;
    // 一个为空,一个非空,显然不同
    if (root1 == null || root2 == null) return false;
    // 两个都非空,但 val 不一样也不行
    if (root1.val != root2.val) return false;

    // root1 和 root2 该比的都比完了
    return isSameTree(root1.left, root2.left)
        && isSameTree(root1.right, root2.right);
}

借助框架,上面这两个例子不难理解吧?如果可以理解,那么所有二叉树算法你都能解决。

二叉搜索树(Binary Search Tree,简称 BST)是一种很常用的的二叉树。它的定义是:一个二叉树中,任意节点的值要大于等于左子树所有节点的值,且要小于等于右边子树的所有节点的值。

如下就是一个符合定义的 BST:

1

下面实现 BST 的基础操作:判断 BST 的合法性、增、删、查。其中“删”和“判断合法性”略微复杂。

零、判断 BST 的合法性

这里是有坑的哦,我们按照刚才的思路,每个节点自己要做的事不就是比较自己和左右孩子吗?看起来应该这样写代码:

boolean isValidBST(TreeNode root) {
   
    if (root == null) return true;
    if (root.left != null && root.val <= root.left.val) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值