版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_40244153/article/details/87934581
题目:给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点? 树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指针。
思路:
首先自己在草稿纸上画图,进行分析(不再展开)。可以发现下一个结点的规律为:
1.若当前结点有右子树时,其下一个结点为右子树中最左子结点;
2.若当前结点无右子树时,
(1)若当前结点为其父结点的左子结点时,其下一个结点为其父结点;
(2)若当前结点为其父结点的右子结点时,继续向上遍历父结点的父结点,直到找到一个结点是其父结点的左子结点(与(1)中判断相同),该结点即为下一结点。
考点:数据结构-树
public TreeLinkNode GetNext(TreeLinkNode pNode) {
if (pNode == null ) return null;
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;
}
收获:
1.在面对复杂问题时要学会画图和举例分析
2.在分情况讨论时,一定要考虑到所有情况,这些都是在写代码前需要考虑到的。