快速找到二叉树的后继节点

快速找到二叉树的后继节点

    • 描述
    • 分析
    • 步骤
    • 代码

描述

设计一个算法,给定一个二叉树中的节点,返回它的后继节点。该二叉树的节点有父节点引用。

分析

二叉树结点的后继一般指的是中序遍历中,该结点的后一个结点。
如果二叉树的节点是没有父节点的引用的。那么对二叉树进行中序遍历可以很容易拿到指定节点的后继节点。
现在二叉树的节点拥有父节点的引用,也就是说访问二叉树时不需要使用栈就可以轻松回溯,解决此问题的效率会高很多。时间复杂度仅为 O(logN)

步骤

如果指定节点有右子树,那么该节点的后继节点一定是右子树中最左边的节点。
如果指定节点没有右子树,则往上找它的父节点。直到当前节点是它的父节点的左孩子,那么这个父节点就是后继节点。

代码

class FindSuccessorNode {
   
    public static Node findSuccessorNode(Node node) {
   
        if (node != null) {
   											// 空节点
            if (node.right != null) {
   								// 如果该节点有右子树,则找到右子树最左的节点
                Node tmp = node.right;
                while (tmp.left != null) {
   
                    tmp 

你可能感兴趣的:(快速找到二叉树的后继节点)