先序遍历
递归写法
def prerderTraversal1(self , root ):
# write code here
res=[]
if root:
res.append(root.val)
res.extend(self.prerderTraversal1(root.left))
res.extend(self.prerderTraversal1(root.right))
return res
非递归写法
def inorderTraversal(self , root ): #
# write code here
stack = [root]
res= []
node = none
while stack[-1] :
node=stack.pop()
res.append(node.val)
if node.right:
stack.append(node.right)
if node.left:
stack.append(node.left)
return res
中序遍历
#递归写法
def inorderTraversal1(self , root ):
# write code here
res=[]
if root:
res.extend(self.inorderTraversal(root.left))
res.append(root.val)
res.extend(self.inorderTraversal(root.right))
return res
# 非递归写法
def inorderTraversal(self , root ):
# write code here
stack = []
res= []
node = root
while node or stack :
while node:
stack.append(node)
node = node.left
node = stack.pop()
res.append(node.val)
node = node.right
return res
后序遍历
#递归写法
def PostorderTraversal(self , root ):
# write code here
res=[]
if root:
res.extend(self.PostorderTraversal(root.left))
res.extend(self.PostorderTraversal(root.right))
res.append(root.val)
return res
# 非递归写法
def PostorderTraversal(self , root ): #方法1,先进行先序遍历,最后将结果反转输出
# write code here
res=[]
stack=[root]
if not root:
return []
while stack:
tmp=stack.pop()
res.append(tmp.val)
if tmp.left:
stack.append(tmp.left)
if tmp.right:
stack.append(tmp.right)
return res[::-1]
层序遍历
# 非递归写法
def LevelorderTraversal(self , root ):
# write code here
stack = [root]
res= []
while stack :
tmp=[]
res_= []
for node in stack:
res_.append(node.val)
if node.left:
tmp.append(node.left)
if node.right:
tmp.append(node.right)
res.append(res_)
stack=tmp
return res