Skip to content

五分钟掌握:二叉树的下一个节点

约 348 字大约 1 分钟

2025-02-27

给定二叉树其中的一个结点,请找出其中序遍历顺序的下一个结点并且返回。

注意,树中的结点不仅包含左右子结点,而且包含指向父结点的指针

img.png

满足node.parent.left=node的node是什么意义?以9为例,9不是左子树,向上扩散一下,5,8,9也不是, 再扩散,2,4,5,7,8,9是1的左子树,此时2就是满足条件的node。以4为例,它是2的左子树,所以4就是这个node。

我们要找自底向上的第一个左子树的根节点。

public class Solution {
    TreeLinkNode GetNext(TreeLinkNode node) {
        if (node == null) return null;
        
        if (node.right != null) { // 如果有右子树,则找右子树的最左节点
            node = node.right;
            while (node.left != null) node = node.left;
            return node;
        }
        
        while (node.parent != null) { // 没右子树,则找第一个这样的节点,它是它的父节点的左孩子。parent 指向父节点。
            // 检查当前节点是不是它的父节点的左子节点。如果不是,则向上,上完再检查,直到找到第一个满足条件的节点。
            // 然后返回它的根节点。
            if (node.parent.left == node) return node.parent;
            node = node.parent;
        }
        
        return null;   // 退到了根节点仍没找到,则返回null
    }
}