• Leetcode DAY 15: 层序遍 and 翻转二叉树 and 对称二叉树


    102. 二叉树的层序遍历

    1. class Solution:
    2. def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
    3. if not root:
    4. return []
    5. result = []
    6. #用队列
    7. que = deque([root])
    8. while que:
    9. size = len(que)
    10. res = []
    11. for _ in range(size):
    12. cur = que.popleft()
    13. res.append(cur.val)
    14. if cur.left:
    15. que.append(cur.left)
    16. if cur.right:
    17. que.append(cur.right)
    18. result.append(res)
    19. return result
    • 117.填充每个节点的下一个右侧节点指针II
      1. class Solution:
      2. def connect(self, root: 'Node') -> 'Node':
      3. if not root:
      4. return root
      5. que = deque([root])
      6. while que:
      7. size = len(que)
      8. for i in range(size):
      9. if i == 0:
      10. cur = que.popleft()
      11. pre = cur
      12. else:
      13. cur = que.popleft()
      14. pre.next = cur
      15. pre = pre.next
      16. if cur.left:
      17. que.append(cur.left)
      18. if cur.right:
      19. que.append(cur.right)
      20. cur.next = None
      21. return root

    226.翻转二叉树

    (递归)

    1. class Solution:
    2. def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
    3. cur = root
    4. if not cur:
    5. return root
    6. #前序遍历 中左右
    7. #中间的处理逻辑
    8. cur.left, cur.right = cur.right, cur.left
    9. self.invertTree(cur.left)
    10. self.invertTree(cur.right)
    11. return root
    交换左右子节点 再反转左右子节点

    101. 对称二叉树

    1. class Solution:
    2. def isSymmetric(self, root: Optional[TreeNode]) -> bool:
    3. def compare(leftT: Optional[TreeNode], rightT: Optional[TreeNode]) -> bool:
    4. #首先把节点为空的情况考虑一下
    5. if leftT != None and rightT == None:
    6. return False
    7. elif leftT == None and rightT != None:
    8. return False
    9. elif leftT == None and rightT == None:
    10. return True
    11. elif leftT.val != rightT.val:
    12. return False
    13. return compare(leftT.left, rightT.right) and compare(leftT.right, rightT.left)
    14. if not root:
    15. return True
    16. return compare(root.left, root.right)

    需要写一个递归函数对根节点的左右子节点进行判断,首先考虑节点为空的情况,最后考虑节点不为空的情况。如果数值不相等,返回False。最后比较左节点的左子节点 and 右节点的右子节点是否相等 

  • 相关阅读:
    【D题解题思路】2023年第九届数维杯国际大学生数学建模挑战赛(文末领取方式)
    python学习笔记(08)---(内置容器-集合、字符串)
    Yolov5的类激活图
    C#中从一个路径复制SQLite数据库并将其粘贴到另一路径
    方向介绍:基于深度学习的轨迹预测
    科技云报道:Web3.0与元宇宙是什么关系?
    C++智能指针
    Mysql批量插入更新如何拆分大事务?
    表单提交类型
    App分发的原理ipa分发系统需求
  • 原文地址:https://blog.csdn.net/qq_44189622/article/details/128111080