前序、中序、后序、层序
前序
# 递归版本
class Solution:
def preorderTraversal(self, root: TreeNode) -> List[int]:
res = []
if not root: return res
res.append(root.val)
res.extend(self.preorderTraversal(root.left))
res.extend(self.preorderTraversal(root.right))
return res
# 循环版本
class Solution:
def preorderTraversal(self, root: TreeNode) -> List[int]:
res = []
if not root: return res
p, stack = root, []
while p or stack:
p = p if p else stack.pop()
res.append(p.val)
if p.right:
stack.append(p.right)
p = p.left
return res
中序
94. 二叉树的中序遍历
# 递归版本
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
res = []
if not root: return res
res.extend(self.inorderTraversal(root.left))
res.append(root.val)
res.extend(self.inorderTraversal(root.right))
return res
# 循环版本
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
res = []
if not root: return res
p, stack = root, []
while p or stack:
if p:
if p.left:
stack.append(p)
p = p.left
else:
res.append(p.val)
p = p.right
else:
p = stack.pop()
res.append(p.val)
p = p.right
return res
class Solution:
def postorderTraversal(self, root: TreeNode) -> List[int]:
res = []
if not root: return res
res.extend(self.postorderTraversal(root.left))
res.extend(self.postorderTraversal(root.right))
res.append(root.val)
return res
class Solution:
def postorderTraversal(self, root: TreeNode) -> List[int]:
res = []
if not root: return res
p, stack, last = root, [], root
while p or stack:
if p:
if (not p.left and not p.right) or p.left == last or p.right == last:
res.append(p.val)
last = p
p = None
else:
stack.append(p)
if p.right: stack.append(p.right)
p = p.left
else:
p = stack.pop()
return res
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
from collections import deque
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
res = []
if not root: return res
que = deque([root])
while que:
n = len(que)
temp = []
for i in range(n):
node = que.popleft()
temp.append(node.val)
if node.left: que.append(node.left)
if node.right: que.append(node.right)
res.append(temp[:])
return res