这题是一个很有有意思的一题,使用中序遍历查找节点的下一节点时会有几种不同的情况,书中设置了实线和虚线,实线是父节点指向子节点的线,虚线是子节点指向父节点的线,注意:此时的两条线很重要,尤其是虚线,所以在设计算法程序时要学会合理的运用这条虚线,行了,废话不多说,下面是python的相关代码:
class seaNode:
def __init__(self):
self.left=None
self.right=None
self.next=None #这里的self.next代表的是子节点指向父节点的线,所以self.next指的是父节点
def seaNode(self,pNode):
if pNode is None:
return
#这是节点存在右子树的情况,只需要找到该右子树的最左边节点即可
elif pNode.right!=None:
pNode=pNode.right
while pNode.left!=None:
pNode=pNode.left
return pNode
#这是节点没有右子树,且属于父节点的右节点的情况
elif pNode.next!=None and pNode.next.right==pNode:
while pNode.next!=None and pNode.next.left!=None:
pNode=pNode.next
return pNode
#这是节点属于左节点的情况,所以下一节点是它的父节点
else:
return pNode.next