144.二叉树的前序遍历
非递归
class Solution(object):
def preorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
L=[]
res=[]
p=root
while L!=[] or p!=None:
if p:
res.append(p.val)
L.append(p)
p=p.left
else:
p=L.pop()
p=p.right
return res
递归
class Solution(object):
def preorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
if not root:
return []
else:
return [root.val]+self.preorderTraversal(root.left)+self.preorderTraversal(root.right)
94. 二叉树中序遍历
非递归
class Solution(object):
def inorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
L=[]
res=[]
p=root
while p!=None or L!=[]:
if p:
L.append(p)
p=p.left
else:
p=L.pop()
res.append(p.val)
p=p.right
return res
递归
class Solution(object):
def inorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
if not root:
return []
else:
return self.inorderTraversal(root.left)+[root.val]+self.inorderTraversal(root.right)
145.二叉树的后序遍历
非递归(可通用,重点学习)
class Solution(object):
def postorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
res=[]
stack=[root]
while stack:
p=stack.pop()
if p:
if isinstance(p,TreeNode):
stack.append(p.val)
stack.append(p.right)
stack.append(p.left)
else:
res.append(p)
return res
递归
class Solution(object):
def postorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
if not root:
return []
else:
return self.postorderTraversal(root.left)+self.postorderTraversal(root.right)+[root.val]