二叉树先序遍历(leetcode No.144):
普通,常用版,递归
1 # Definition for a binary tree node. 2 # class TreeNode: 3 # def __init__(self, x): 4 # self.val = x 5 # self.left = None 6 # self.right = None 7 8 class Solution: 9 def preorderTraversal(self, root: TreeNode) -> List[int]: 10 if not root: 11 return [] 12 path=[] 13 def preorder(root): 14 if root: 15 path.append(root.val) 16 preorder(root.left) 17 preorder(root.right) 18 return 19 preorder(root) 20 return path
- 一行解决
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def preorderTraversal(self, root: TreeNode) -> List[int]: if not root: return [] return [root.val]+self.preorderTraversal(root.left)+self.preorderTraversal(root.right)
- 迭代方式
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def preorderTraversal(self, root: TreeNode) -> List[int]: if not root: return [] stack=[root] node=root path=[] while stack: node=stack.pop() path.append(node.val)
if node.right:
stack.append(node.right) if node.left: stack.append(node.left) return path
中序遍历
- 迭代,每次都先将节点移到树的左下角
1 # Definition for a binary tree node. 2 # class TreeNode: 3 # def __init__(self, x): 4 # self.val = x 5 # self.left = None 6 # self.right = None 7 8 class Solution: 9 def inorderTraversal(self, root: TreeNode) -> List[int]: 10 if not root: 11 return [] 12 stack=[] 13 path=[] 14 node=root 15 while stack or node: 16 while node: 17 stack.append(node) 18 node=node.left 19 node=stack.pop() 20 path.append(node.val) 21 node=node.right 22 return path
- 递归
1 # Definition for a binary tree node. 2 # class TreeNode: 3 # def __init__(self, x): 4 # self.val = x 5 # self.left = None 6 # self.right = None 7 8 class Solution: 9 def inorderTraversal(self, root: TreeNode) -> List[int]: 10 if not root: 11 return [] 12 path=[] 13 def inorder(root): 14 if root.left: 15 inorder(root.left) 16 path.append(root.val) 17 if root.right: 18 inorder(root.right) 19 return 20 inorder(root) 21 return path
后序遍历
- 迭代
1 class Solution: 2 def postorderTraversal(self, root: TreeNode) -> List[int]: 3 if not root: 4 return [] 5 stack=[root] 6 path=[] 7 #node=root 8 while stack: 9 #node=stack.pop() 10 node=stack.pop() 11 path.append(node.val) 12 if node.left: 13 stack.append(node.left) 14 if node.right: 15 stack.append(node.right) 16 17 return path[::-1]
1 # Definition for a binary tree node. 2 # class TreeNode: 3 # def __init__(self, val=0, left=None, right=None): 4 # self.val = val 5 # self.left = left 6 # self.right = right 7 class Solution: 8 def postorderTraversal(self, root: TreeNode) -> List[int]: 9 if not root: 10 return [] 11 stack=[] 12 path=[] 13 node=root 14 while stack or node: 15 while node: 16 stack.append(node) 17 path.append(node.val) 18 node=node.right 19 node=stack.pop() 20 node=node.left 21 return path[::-1]
递归
class Solution: def postorderTraversal(self, root: TreeNode) -> List[int]: path=[] def postorder(root): if root: if root.left: postorder(root.left) if root.right: postorder(root.right) path.append(root.val) return postorder(root) return path
层序遍历
BFS
1 # Definition for a binary tree node. 2 # class TreeNode: 3 # def __init__(self, x): 4 # self.val = x 5 # self.left = None 6 # self.right = None 7 8 class Solution: 9 def levelOrder(self, root: TreeNode) -> List[List[int]]: 10 if not root: 11 return [] 12 stack=collections.deque([root]) 13 path=[] 14 while stack: 15 size=len(stack) 16 lists=[] 17 for _ in range(size): 18 node=stack.popleft() 19 lists.append(node.val) 20 if node.left: 21 stack.append(node.left) 22 if node.right: 23 stack.append(node.right) 24 path.append(lists[:]) 25 return path
DFS
1 class Solution: 2 def levelOrder(self, root: TreeNode) -> List[List[int]]: 3 4 def dfs(root,level,res): 5 if len(res)==level :res.append([]) 6 res[level].append(root.val) 7 if root.left: dfs(root.left,level+1,res) 8 if root.right: dfs(root.right,level+1,res) 9 return res 10 if not root: 11 return [] 12 res=dfs(root,0,[]) 13 return res