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

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

思路如下:
下一个节点分几种情况:
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:二叉树的下一个节点)