二叉树的下一个节点

二叉树的下一个结点

http://www.nowcoder.com/questionTerminal/9023a0c988684a53960365b889ceaf5e

public TreeLinkNode getNext(TreeLinkNode pNode) {
        if (pNode == null)
            return null;
        if(pNode.right != null){
            TreeLinkNode tmp = pNode.right;
            while (tmp.left != null)
                tmp = tmp.left;

            return tmp;
        }
        else {
            //右子树为空,下一个节点在父亲或者祖先节点
            //如果此节点为左节点,后继节点为父亲,为右节点则为祖先,为根节点则没有后继
            if(pNode.next == null){
                //没有父亲,为根节点
                return null;
            }else {
                //有父亲
                if(pNode == pNode.next.left){
                    //为左孩子
                    return pNode.next;
                }
                if(pNode == pNode.next.right){
                    //为右孩子
                    //找祖先为祖先父亲左孩子的祖先父亲
                    while (pNode.next != null && pNode.next.next != null && pNode.next != pNode.next.next.left){
                        pNode = pNode.next;
                    }
                    if(pNode.next.next == null){
                        //没有祖先,则已经遍历完,无后继
                        return null;
                    }
                    return pNode.next.next;//祖先为左孩子
                }
            }
        }
        return null;
    }
全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务