前序遍历
思路
代码
class Solution:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
if not root:
return []
return [root.val] + self.preorderTraversal(root.left) + self.preorderTraversal(root.right)
中序遍历
思路
代码
class Solution:
def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
if not root:
return []
return self.inorderTraversal(root.left) + [root.val] + self.inorderTraversal(root.right)
后序遍历
思路
代码
class Solution:
def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
if not root:
return []
return self.postorderTraversal(root.left) + self.postorderTraversal(root.right) + [root.val]
层序遍历
思路
代码
class Solution:
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
if not root:
return []
q = deque()
s = [[root.val]]
cur_end = root
next_end = None
q.append(root)
p = []
while q:
n = q.popleft()
if n.left:
q.append(n.left)
next_end = n.left
p.append(n.left.val)
if n.right:
q.append(n.right)
next_end = n.right
p.append(n.right.val)
if n == cur_end:
s.append(p)
cur_end = next_end
p = []
return s[:-1]
优化
(清晰):
class Solution:
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
if not root: return []
s, q = [], collections.deque()
q.append(root)
while q:
k = []
for i in range(len(q)):
n = q.popleft()
k.append(n.val)
if n.left: q.append(n.left)
if n.right: q.append(n.right)
s.append(k)
return s