搜索二叉树的前驱和后继结点

什么是前驱结点和后继结点

二叉搜索树中某一结点的前驱结点和后继结点,指的是这个结点在这个二叉搜索树的中序遍历序列中的前面一个结点和后面结点。

即前驱结点是二叉搜索树中比该结点小的所有结点中的最大的那个结点;后继结点是值比该结点大的所有结点中最小的那个。

如何在一个二叉搜索树中找前驱结点?

在这里插入图片描述
中序遍历{9,12,14,17,19,23,50,54,67,72,76}

  1. 如果这个结点有左子树,那么整个左子树中最大的那个结点(在左子树中不停往右走,直到到达尽头)就是前驱结点 。
    eg.17的前驱结点是 14

  2. 如果这个结点 p 没有左子树:
    1)p 是它父节点 Q的右结点,那么 p 的前驱结点就是他的父节点 Q;(因为比p小的是左子树或者父节点和父节点的左子树,我们已经假设 p没有左子树,所以比 p 小的只有 p 的父节点 Q 和Q的左子树;并且前驱结点是 比 p小的所有结点中最大的那个,所以 在 Q 和Q的左子树中,Q是最大的结点。)

    2)p 是它 父节点Q的左结点,那么 p 的前驱结点就需要沿着 Q 一路向上,直到 到达的结点 m,当m是某个结点n的右孩子。p的前驱结点是n
    eg. 54的前驱结点是50
    54没有左子树,并且54是它父节点 76 的左子树,因此我们沿着76 一路向上,因为 76 是某个结点(50)的右结点,所以54的前驱结点是 50.
    eg.19 的前驱 是 17

  3. 否则 该结点没有前驱结点。

如何在二叉搜索树中寻找后继结点

发布了49 篇原创文章 · 获赞 2 · 访问量 869

猜你喜欢

转载自blog.csdn.net/qq_43720551/article/details/105085145