美文网首页
剑指offer | 二叉树的下一个结点

剑指offer | 二叉树的下一个结点

作者: icebreakeros | 来源:发表于2019-08-04 15:55 被阅读0次

二叉树的下一个结点

给定一棵二叉树和其中一个结点,如何找出中序遍历顺序的下一个结点
树中的结点除了有两个分别指向左右子结点的指针外,还有一个指向父结点的指针

分析:
如果该结点存在右子树,那么下一个结点就是右子树的最左结点
如果该结点不存在右子树,继续判断如果该结点是它父结点的左子结点,那么它的下一个结点就是它的父结点,如果不是,沿着指向父结点的指针一直向上遍历,直到找到一个是它父结点的左子结点的结点,如果存在,那么这个结点的父结点就是下一个结点

class BinaryNode<Key extends Comparable<Key>> {
    public Key key;
    public BinaryNode parent, left, right;

    public BinaryNode(Key key) {
        this.key = key;
    }
}

public class I58_NextNodeInBinaryTrees {

    public BinaryNode getNext(BinaryNode node) {
        if (Optional.ofNullable(node).isEmpty()) {
            return null;
        }

        BinaryNode next = null;
        if (Optional.ofNullable(node.right).isPresent()) {
            // 存在右子树,那么下个结点就是右子树中最左结点
            BinaryNode right = node.right;
            while (Optional.ofNullable(right.left).isPresent()) {
                right = right.left;
            }
            next = right;
        } else if (Optional.ofNullable(node.parent).isPresent()) {
            BinaryNode current = node;
            BinaryNode parent = node.parent;
            while (Optional.ofNullable(parent).isPresent() 
                && current == parent.right) {
                current = parent;
                parent = parent.parent;
            }
            next = parent;
        }
        return next;
    }
}

相关文章

网友评论

      本文标题:剑指offer | 二叉树的下一个结点

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