二叉树的中序遍历:
迭代:
class Solution: def inorderTraversal(self, root: TreeNode) -> List[int]: res,stack = [],[] while True: while root: stack.append(root) root = root.left if not stack: return res node = stack.pop() res.append(node.val) root = node.right return res
递归:
class Solution: def inorderTraversal(self, root: TreeNode) -> List[int]: res = [] def helper(root): if not root: return helper(root.left) res.append(root.val) helper(root.right) helper(root) return res
另:
class Solution: def inorderTraversal(self, root: TreeNode) -> List[int]: f = self.inorderTraversal return f(root.left) + [root.val] + f(root.right) if root else []
二叉树的前序遍历:
递归:
class Solution: def preorderTraversal(self, root: TreeNode) -> List[int]: res = [] def helper(root): if not root: return res.append(root.val) helper(root.left) helper(root.right) helper(root) return res
迭代:
class Solution: def preorderTraversal(self, root: TreeNode) -> List[int]: res,stack = [],[root] if not root: return res while stack: node = stack.pop() res.append(node.val) if node.right: stack.append(node.right) if node.left: stack.append(node.left) return res
二叉树的后序遍历:
迭代1:
class Solution: def postorderTraversal(self, root: TreeNode) -> List[int]: res = [] if not root: return res stack = [root] while stack: node = stack.pop() if node.left: stack.append(node.left) if node.right: stack.append(node.right) res.append(node.val) return res[::-1]
迭代2:
class Solution: def postorderTraversal(self, root: TreeNode) -> List[int]: if not root: return [] stack = [] p = root res = [] flag = [] while p or stack: while p: flag.append(0) stack.append(p) p = p.left while stack and flag[-1] == 1: flag.pop() res.append(stack.pop().val) if stack: flag[-1] = 1 p = stack[-1].right return res
二叉树的锯齿形遍历:
递归:
class Solution: def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]: res = [] def helper(root, depth): if not root: return if len(res) == depth: res.append([]) if depth % 2 == 0: res[depth].append(root.val) else: res[depth].insert(0, root.val) helper(root.left, depth + 1) helper(root.right, depth + 1) helper(root, 0) return res
迭代:
class Solution: def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]: if not root: return [] stack = [root] ans = [] depth = 0 while stack: tem_ans,tem_stack = [],[] for i in stack: tem_ans.append(i.val) if i.left: tem_stack.append(i.left) if i.right: tem_stack.append(i.right) if depth%2 == 0: ans.append(tem_ans) else: ans.append(tem_ans[::-1]) stack = tem_stack depth += 1 return ans
原文:https://www.cnblogs.com/oldby/p/11718664.html