需要好好看一下迭代写法,层次遍历写了一道确实快速刷完了十道hhh
递归遍历
无脑递归hhh
# 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
class Solution:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
# 递归
res = []
def travesel(root: Optional[TreeNode]):
if root == None:
return
res.append(root.val)
travesel(root.left)
travesel(root.right)
travesel(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
class Solution:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
# 迭代
stack = []
res = []
if root == None:
return res
stack.append(root)
while len(stack) != 0:
temp = stack[-1]
stack.pop()
res.append(temp.val)
if temp.right is not None:
stack.append(temp.right)
if temp.left is not None:
stack.append(temp.left)
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
from collections import deque
class Solution:
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
mydeque = deque()
mydeque1 = deque()
levelRes = []
res = []
if root == None:
return res
mydeque.append(root)
while len(mydeque) != 0 or len(mydeque1) != 0:
temp = mydeque.popleft()
levelRes.append(temp.val)
if temp.left != None:
mydeque1.append(temp.left)
if temp.right != None:
mydeque1.append(temp.right)
if len(mydeque) == 0:
res.append(levelRes)
mydeque = mydeque1
mydeque1 = deque()
levelRes = []
return res