给定一棵二叉树,分别按照二叉树先序,中序和后序打印所有的节点。
数据范围:
,树上每个节点的val值满足
要求:空间复杂度
,时间复杂度
样例解释:
class Solution: def threeOrders(self , root ): # write code here pre_order_=[];mid_order_=[];post_order_=[] def pre_order(root): if root==None: return None elif root.left==None and root.right==None: pre_order_.append(root.val) else: pre_order_.append(root.val) pre_order(root.left) pre_order(root.right) def mid_order(root): if root==None: return None elif root.left==None and root.right==None: mid_order_.append(root.val) else: mid_order(root.left) mid_order_.append(root.val) mid_order(root.right) def post_order(root): if root==None: return None elif root.left==None and root.right==None: post_order_.append(root.val) else: post_order(root.left) post_order(root.right) post_order_.append(root.val) pre_order(root) mid_order(root) post_order(root) return [pre_order_,mid_order_,post_order_]
# class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None # # # @param root TreeNode类 the root of binary tree # @return int整型二维数组 # class Solution: def mlr_dfs(self,root): if not root: return None self.result1.append(root.val) self.mlr_dfs(root.left) self.mlr_dfs(root.right) def lmr_dfs(self,root): if not root: return None self.lmr_dfs(root.left) self.result2.append(root.val) self.lmr_dfs(root.right) def rml_dfs(self,root): if not root: return None self.rml_dfs(root.left) self.rml_dfs(root.right) self.result3.append(root.val) def threeOrders(self , root ): # write code here result = [] self.result1 = [] self.mlr_dfs(root) result.append(self.result1) self.result2 = [] self.lmr_dfs(root) result.append(self.result2) self.result3 = [] self.rml_dfs(root) result.append(self.result3) return result # 简化一下就是评论区的简化版答案 # class Solution: # def threeOrders(self , root ): # # write code here # self.res = [[],[],[]] # self.dfs(root) # return self.res # def dfs(self,root): # if not root: return # self.res[0].append(root.val) # self.dfs(root.left) # self.res[1].append(root.val) # self.dfs(root.right) # self.res[2].append(root.val) # return
class Solution: pre, inn, post = [], [], [] #用来存储先序遍历、中序遍历、后序遍历结果 ##先序遍历 def preOrderRecur(self, root): if root==None: return [] self.pre.append(root.val) ##根 self.preOrderRecur(root.left) ##左 self.preOrderRecur(root.right) ##右 ##中序遍历 def innOrderRecur(self, root): if root==None: return [] self.innOrderRecur(root.left) #左 self.inn.append(root.val) #根 self.innOrderRecur(root.right) #右 def postOrderRecur(self, root): if root==None: return [] self.postOrderRecur(root.left) self.postOrderRecur(root.right) self.post.append(root.val) def threeOrders(self , root ): # write code here res = [] self.pre.clear() self.inn.clear() self.post.clear() #后台有多组数据所以要清空 if root == None: return res self.preOrderRecur(root) #先序遍历 self.innOrderRecur(root) #中序遍历 self.postOrderRecur(root) #后序遍历 res.append(self.pre) #将遍历结果放入res res.append(self.inn) res.append(self.post) return res
class Solution: def threeOrders(self , root ): # write code here self.res = [[],[],[]] self.dfs(root) return self.res def dfs(self,root): if not root: return self.res[0].append(root.val) self.dfs(root.left) self.res[1].append(root.val) self.dfs(root.right) self.res[2].append(root.val) return在一个dfs里直接遍历了