# 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]: result = [] ifnot root: return result result.append(root.val) result += self.preorderTraversal(root.left) result += self.preorderTraversal(root.right) return result
# Definition fora binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]: result = [] if not root: return result stack = [root] while stack: cur = stack.pop() result.append(cur.val) if cur.right: stack.append(cur.right) if cur.left: stack.append(cur.left) return result
中序遍历
递归版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
# 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]: result = [] ifnot root: return result result += self.inorderTraversal(root.left) result.append(root.val) result += self.inorderTraversal(root.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: definorderTraversal(self, root: Optional[TreeNode]) -> List[int]: result = [] ifnot root: return result stack = [] p = root while stack or p: # 将先根入栈,然后左节点入栈 while p: stack.append(p) p = p.left # 左节点为空,根节点此时可以出栈,然后再看该节点的右节点 p = stack.pop() result.append(p.val) p = p.right return result
###Morris 遍历待补充
后序遍历
递归版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
# 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]: result = [] ifnot root: return result result += self.postorderTraversal(root.left) result += self.postorderTraversal(root.right) result.append(root.val) return result
# Definition fora binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]: result = [] if not root: return result stack = [] p = root prev = None while stack orp: whilep: stack.append(p) p = p.left p = stack.pop() # 如果上一次访问过p的右子树或者右子树不存在 ifprev == p.rightor not p.right: result.append(p.val) prev = p p = None else: stack.append(p) p = p.right return result