008,二叉樹的下一個節點

weixin_33850890發表於2018-10-08

二叉樹的下一個結點

題目描述

給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指標。

解題思路

① 如果一個節點有右子樹不為空,那麼該節點的下一個節點是右子樹的最左節點;

5501600-3722ac18da265ba6.png

② 否則,向上找第一個左連結指向的樹包含該節點的祖先節點。

5501600-2ae3181cfdaa0c46.png
public class TreeLinkNode {
    int val;
    TreeLinkNode left = null;
    TreeLinkNode right = null;
    TreeLinkNode next = null;

    TreeLinkNode(int val) {
        this.val = val;
    }
}

public TreeLinkNode GetNext(TreeLinkNode pNode) {
    if (pNode.right != null) {
        TreeLinkNode node = pNode.right;
        while (node.left != null) node = node.left;
        return node;
    } else {
        while (pNode.next != null) {
            TreeLinkNode parent = pNode.next;
            if (parent.left == pNode) return parent;
            pNode = pNode.next;
        }
    }
    return null;
}

相關文章