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

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

作者: xm的那年 | 来源:发表于2019-08-12 21:09 被阅读0次

    题目:给定一颗二叉树和其中的一个节点,如何找出中序遍历的下一个节点?树种的节点除了有两个分别指向左,右,子节点的指针,还要一个指向父节点的指针?

    思路如下:
    下一个节点分几种情况:
    1.该节点有右子树,那么下一个节点就是其右子树中的最左的节点
    2.该节点没有右子树,如果该节点是父节点的左孩子,那么下一个节点就是父节点
    3.该节点没有右子树,而且该节点是父节点的右孩子,那么应该回溯到该节点的父节点的父节点,直到找到某个节点是其父节点的左节点,那么下一个节点就是其父节点

     public TreeLinkNode GetNext(TreeLinkNode pNode)
        {
            //判断该节点有没有右孩子树
            if(pNode.right!=null){
                //如果有右孩子,递归查询到最左孩子节点
                 pNode=pNode.right;
                while(pNode.left!=null){
                    pNode=pNode.left;
                }
                //返回最左节点
                return pNode;
            }
        while (pNode.next!=null){
                //如果没有右孩子节点,然后判断该节点是不是父节点的左节点
                if(pNode==pNode.next.left){
                    return pNode.next;
                }else{
                    //没有右孩子节点,而且该节点还是父节点的右节点。就应该回溯找到节点是父节点的左孩子节点,如果没有则没有下一个节点
                    pNode=  pNode.next;
                    }
            }
            return null;
        }
    }
    
    

    相关文章

      网友评论

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

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