二叉树后继节点,中序遍历的后一个节点
(1)有右子树,右子树的最左节点是后继
(2)无右子树,并且是父节点的左孩子,父节点为后继
(3)无右子树,并且是父节点的右孩子,查该节点是哪个节点左子树的最后节点
(一直往上找,找到一个节点是父节点的左孩子,则该父节点为后继节点)
class Node():
def __init__(self,item):
self.elem=item
self.lchild=None
self.rchild=None
self.parent=None
def getSuccessorNode(node):
if node == None:
return node
if node.rchild != None: #没有右子树
return getleftMost(node.rchild)
else: #有右子树
parent = node.parent
while parent != None and parent.lchild != node: #(3)
node = parent
parent = node.parent
return parent
def getleftMost( node): # 找最左节点
if node == None:
return node
while node.lchild != None:
no