二叉树的下一个节点

二叉树的下一个结点

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;
    }
全部评论

相关推荐

07-09 18:33
门头沟学院 Java
这么逆天每年都有人去??? 填多益网申就是大型的服从性测试
鲁大牛:辅导员在群里发了这个公司我就申了一下。网申居然要写当场开摄像头写两篇不少于三百字的作文。太逆天了
点赞 评论 收藏
分享
zYvv:双一流加大加粗再标红,然后广投。主要是获奖荣誉不够,建议开始不用追求大厂,去别的厂子刷下实习。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务