1. 程式人生 > >劍指offer——二叉樹中序的下一個節點

劍指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)