'''
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。
注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
'''
class TreeLinkNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
self.next = None
class Solution:
def GetNext(self, pNode):
if pNode == None:
return
pNext = None
# 如果这个节点有右子树,那么下一个节点就是右子树的最左节点
if pNode.right != None:
pRight = pNode.right
while pRight.left != None:
pRight = pRight.left
pNext = pRight
# next指针为指向父节点的指针
# 如果节点是其父节点的左子树,那么下一个节点就是他的父节点
elif pNone.next != None:
pCurrent = pNode
pParent = pCurrent.next
# 节点没有右子树,并且还是它父节点的右子树则一直向上遍历,
# 直到找到是它父节点的左子节点,为下一个节点
while pParent != None and pCurrent == pParent.right:
pCurrent = pParent
pParent = pCurrent.next
pNext = pParent
return pNext
剑指offer python版 8.二叉树的下一个节点
最新推荐文章于 2022-04-21 11:03:18 发布