剑指offer——二叉树中序的下一个节点

二叉树的问题一般采用两种方式,一种根据需求一步一步探讨,第二种,将二叉树遍历至数组,对数组操作。
第一种,根据中序遍历,指定节点的下一个一般为右节点,子节点的左节点或者父节点:

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)

猜你喜欢

转载自blog.csdn.net/weixin_40732844/article/details/83782518