美文网首页
二叉搜索树的前驱、后驱

二叉搜索树的前驱、后驱

作者: lkuuuuuun | 来源:发表于2019-08-06 15:44 被阅读0次

二叉搜索树(Binary Search Tree) 简称BST,也叫二叉排序树, 它是学习平衡树的基础.
二叉搜索树的定义如下:
1.若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;
2.若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;
3.任意节点的左、右子树也分别为二叉查找树;
4.没有键值相等的节点。
5.二叉搜索树可以为一棵空树。

BST中序遍历能得到有序序列是其最常用的特性.

下图即为二叉搜索树


BST

定义如下:

public class TreeNode {
    int val;
    TreeNode left ;
    TreeNode right ;
    TreeNode parent ;

    public TreeNode(int val) {
        this.val = val;
    }
}
前驱:小于该节点值的最大节点(中序遍历时的上一个节点)

如上图:
4的前驱结点是3
2的前驱结点是1
6的前驱结点是5

查找规则如下:
1.有左孩子 找左子树中最右边的值
没有左孩子 则判断在其父节点的位子
2.如果是父节点的右孩子则父节点即是前驱节点
3.如果是父节点的左孩子则 向上寻找一个节点Q 直到Q节点是其父节点P的右孩子 p节点即为前驱节点
Java代码实现如下:

    // 二叉搜索树前驱 小于该节点的最大节点(中序遍历时的上一个节点)
    public static TreeNode preNode(TreeNode node) {
        if (node == null)
            return null;
        // 1.有左孩子 找左子树中最右边的值
        if (node.left != null) {
            TreeNode child = node.left;
            while (child != null && child.right != null) {
                child = child.right;
            }
            return child;
        }
        // 没有左孩子 则判断在其父节点的位子
        // 2.如果是父节点的右孩子则父节点即是前驱节点
        // 3.如果是父节点的左孩子则 向上寻找一个节点Q 直到Q节点是其父节点P的右孩子 p节点即为前驱节点
        TreeNode p = node.parent;
        while (p != null && node == p.left) {
            node = p;
            p = p.parent;
        }
        return p;
    }
二叉搜索树后驱:大于该节点的最小节点(中序遍历时的下一个节点)

如上图:
7的后继结点是8
5的后继节点是6
2的后继节点是3
查找规则如下:
1.有右孩子 右子树中最小节点即为后驱节点
没有右孩子 判断在其父节点的位子
2.如果是父节点的左孩子 则父节点就是后驱节点
3.如果是父节点的右孩子 则继续向上寻找一节点Q 直到Q节点是其父节点P的左节点 p节点即为后驱节点
Java代码实现如下:

    // 二叉搜索树后驱 大于该节点的最小节点(中序遍历时的下一个节点)
    public static TreeNode postNode(TreeNode node) {
        if (node == null)
            return null;
        // 1.有右孩子 右子树中最小节点即为后驱节点
        if (node.right != null) {
            TreeNode child = node.right;
            while (child != null && child.left != null) {
                child = child.left;
            }
            return child;
        }

        // 没有右孩子 判断在其父节点的位子
        // 2.如果是父节点的左孩子 则父节点就是后驱节点
        // 3.如果是父节点的右孩子 则继续向上寻找一节点Q 直到Q节点是其父节点P的左节点 p节点即为后驱节点
        TreeNode p = node.parent;
        while (p != null && node == p.right) {
            node = p;
            p = p.parent;
        }
        return p;
    }

相关文章

  • 二叉搜索树的插入和删除

    有了前文对BST的前驱后驱理解的基础,还不理解的小伙伴戳这里二叉搜索树的前驱、后驱.我们便可以学习BST的插入和删...

  • 二叉搜索树的前驱、后驱

    二叉搜索树(Binary Search Tree) 简称BST,也叫二叉排序树, 它是学习平衡树的基础.二叉搜索树...

  • 19-前驱节点和后继节点

    一、前驱节点 二、后继节点 代码以二叉搜索树为例: 三、完善二叉搜索树代码,remove只针对二叉搜索树 删除代码...

  • 十三、前驱节点(predecessor)&后继节点(succes

    前驱节点(predecessor) 前驱节点:中序遍历时的前一个节点如果是二叉搜索树,前驱节点就是前一个比它小的节...

  • 计算机二级java复习资料--数据结构

    1.非线性结构的逻辑特征是一个结点元素可能对应多个直接前驱和多个后驱。常见的非线性结构有:树(二叉树等),图(网等...

  • 算法简记- BST相关

    1、// 给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 ...

  • 数据结构与算法之二叉搜索树(八)

    目录 二叉搜索树概念二叉搜索树的接口设计,包括增,删,改,查平衡二叉搜索树 一 二叉搜索树 二叉搜索树是二叉树的一...

  • 701. 二叉搜索树中的插入操作

    题目描述 给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 ...

  • 二叉树的插入操作

    题目描述:给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 ...

  • 701. Insert into a Binary Search

    给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 ...

网友评论

      本文标题:二叉搜索树的前驱、后驱

      本文链接:https://www.haomeiwen.com/subject/gxfwdctx.html