# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right classSolution: defpreorderTraversal(self, root: Optional[TreeNode]) -> List[int]: res = [] defdfs(node): if node == None: return res.append(node.val) dfs(node.left) dfs(node.right) dfs(root) return res
这个是前序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right classSolution: definorderTraversal(self, root: Optional[TreeNode]) -> List[int]: res = [] defdfs(node): if node == None: return dfs(node.left) res.append(node.val) dfs(node.right) dfs(root) return res
这个是中序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right classSolution: defpostorderTraversal(self, root: Optional[TreeNode]) -> List[int]: res = [] defdfs(node): if node isNone: return dfs(node.left) dfs(node.right) res.append(node.val) dfs(root) return res
# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right classSolution: defpreorderTraversal(self, root: Optional[TreeNode]) -> List[int]: ifnot root: return [] result = [] stack = [root] while stack: node = stack.pop() result.append(node.val) if node.right: stack.append(node.right) if node.left: stack.append(node.left) return result
# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right classSolution: deflevelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: ifnot root : return [] result = [] que = collections.deque([root]) while que: in_ = [] for i inrange(len(que)): cur = que.popleft() in_.append(cur.val) if cur.left: que.append(cur.left) if cur.right: que.append(cur.right) result.append(in_) return result
# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right classSolution: deflevelOrderBottom(self, root: Optional[TreeNode]) -> List[List[int]]: ifnot root: return [] result = [] que = collections.deque([root]) while que: in_ = [] for i inrange(len(que)): cur = que.popleft() in_.append(cur.val) if cur.left: que.append(cur.left) if cur.right: que.append(cur.right) result.append(in_) return result[::-1]
这是二叉树的层序遍历 II 代码,和层序遍历的代码只有一行不同,就是在返回结果的时候,将结果反转一下即可。(就多了个反转)
# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right classSolution: defrightSideView(self, root: Optional[TreeNode]) -> List[int]: ifnot root: return [] result=[] que = collections.deque([root]) while que: n=len(que) for i inrange(n): cur = que.popleft() if i == n-1: result.append(cur.val) if cur.left: que.append(cur.left) if cur.right: que.append(cur.right) return result
# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right classSolution: defaverageOfLevels(self, root: Optional[TreeNode]) -> List[float]: ifnot root: return [] result = [] que = collections.deque([root]) while que: n=len(que) in_ = 0 for i inrange(n): cur = que.popleft() in_ += cur.val if cur.left: que.append(cur.left) if cur.right: que.append(cur.right) result.append(in_/n) return result