代码随想录算法训练营第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
posted @ 2024-06-17 00:28  哆啦**  阅读(8)  评论(0)    收藏  举报