代码随想录算法训练营第14天 | 二叉树基础1
代码随想录算法训练营第14|
二叉树理论
https://programmercarl.com/二叉树理论基础.html
二叉树递归遍历
https://programmercarl.com/二叉树的递归遍历.html
二叉树统一迭代
https://programmercarl.com/二叉树的统一迭代法.html#其他语言版本
二叉树递归模板
重点
- 调用
- 加起来即可
模板代码
# 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 = []
if not root:
return res
else:
right = self.preorderTraversal(root.right)
left = self.preorderTraversal(root.left)
return [root.val]+left+right
二叉树统一迭代
重点
- 栈存储
- node后接None
- 反向push
题解
class Solution:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
st = []
res = []
if root:
st.append(root)
while st:
node = st.pop()
if node:
if node.right:
st.append(node.right)
if node.left:
st.append(node.left)
st.append(node)
st.append(None)
else:
node = st.pop()
res.append(node.val)
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 levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
if not root:
return []
queue = collections.deque([root])
res = []
while queue:
level = []
for _ in range(len(queue)):
node = queue.popleft()
level.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
res.append(level)
return res

浙公网安备 33010602011771号