题目:给定一颗二叉树和其中的一个节点,如何找出中序遍历的下一个节点?树种的节点除了有两个分别指向左,右,子节点的指针,还要一个指向父节点的指针?
思路如下:
下一个节点分几种情况:
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;
}
}
网友评论