二叉树的问题一般采用两种方式,一种根据需求一步一步探讨,第二种,将二叉树遍历至数组,对数组操作。
第一种,根据中序遍历,指定节点的下一个一般为右节点,子节点的左节点或者父节点:
class Solution:
def GetNext(self,pNode):
if pNode.right:
p=pNode.right
while p.left:
p=p.left
return p
while pNode.next:
if(pNode.next.left==pNode):
return pNode.next
pNode=pNode.next
return
第二种 遍历输出中序序列数组,在数组中找出下一个节点
class Solution:
def GetNext(self,pNode):
dummy=pNode
while dummy.next:
dummy=dummy.next
self.result=[]
self.midTraversal(dummy)
return self.reslut[self.result.index(pNode)+1] if self.result.index(pNode) !=len(result)-1 else None
def midTraversal(self,root):
if not root: return
self.midTraversal(root.left)
self.midTraversal(root)
self.midTraversal(root.right)