美文网首页
面试题8:二叉树的下一个节点

面试题8:二叉树的下一个节点

作者: 夹小欣 | 来源:发表于2018-03-20 20:57 被阅读7次
    public TreeLinkNode GetNext(TreeLinkNode pNode)
    {
        if(pNode==null)return null;
        // 如果一个节点有右子树,则中序遍历中,他的下一个节点是右子树中最左端的节点
        if(pNode.right!=null){
            TreeLinkNode temp = pNode.right;
            while(temp!=null)
                if(temp.left!=null)
                    temp = temp.left;
                else
                    break;
            return temp;
        }
        // 节点没有右子树, 但左子树非空,下一个节点是自己的父节点
        else if(pNode.left!=null){
            return pNode.next;
        }
        // 节点左右子树都空, 如果当前是左孩子节点,下一个是父节点
        // 如果当前是右孩子节点,下一个要向上找,直到某个节点是左孩子,返回那个节点的父节点
        // 如果一直找到了跟节点还是右孩子,则没有下一个节点,
        // 如果找到跟节点时是左孩子,则根是下一个节点
        else{
            if(pNode.next==null) return null;//左右子树都空,父节点也空,是只有一个跟的树
            // 当前是左孩子
            if(pNode.next.left==pNode)
                return pNode.next;
            // 当前是右孩子
            else{
                TreeLinkNode ind = pNode.next;
                boolean flag = false;
                // 一直向上找,找到根的亲儿子
                while(ind.next!=null){
                    // 他不是左孩子
                    if(ind.next.left!=ind)
                            ind = ind.next;
                    else
                    {flag=true;break;}
                }
                // 找到了一个左孩子
                if(flag){
                    return ind.next;
                }
                else{
                   return null;
                }
            }
            
        }
    }


相关文章

网友评论

      本文标题:面试题8:二叉树的下一个节点

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