代码随想录算法训练营Day 13|Python|层序遍历,226.翻转二叉树,101.对称二叉树

本文介绍了如何使用Python实现二叉树的层序遍历算法,以及如何递归地翻转二叉树和检查二叉树是否轴对称。通过实例展示了三层基本操作的解题思路和代码实现。
摘要由CSDN通过智能技术生成

层序遍历  10 

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

解题思路:

设置一个新的deque用来存储遍历的节点,弹出每个最左边的节点,检查是否有左右children, 有的话加入deque,每一层设置一个新的list用来存储这一层的节点value,list针对每一层都会更新。

代码如下:

# 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 []
        res = []
        queue = collections.deque([root])
       #while queue exists pop out the elements in order
        while queue:
            lst = []
            for _ in range(len(queue)):
                node = queue.popleft()
                lst.append(node.val)
                if node.left:
                    queue.append(node.left)
                if node.right:
                    queue.append(node.right)
            res.append(lst)
        return res

226.翻转二叉树 

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。

解题思路:

递归三步骤

  1. 确定输入:def swap(root)
  2. 确定停止条件:if not root: return None 到达最底端停止
  3. 递归逻辑:root.left, root.right = root.right, root.left
  4. # 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 invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
            if not root:
                return 
            res = []
            def swap(root):
                if not root:
                    return None
                root.left, root.right = root.right, root.left
                swap(root.left)
                swap(root.right)
            swap(root)
            return root

101.对称二叉树 

给你一个二叉树的根节点 root , 检查它是否轴对称。

解题思路:

递归三步骤

确定输入和参数:def compare(left, right)比较左右两边,因此输入left child nad right child

确定停止条件:not left, right; left, not right; not left, not right(return True); left.val != righ.val

递归逻辑:left.val == right.val继续对比left.left, right.right;left.right, right.left

# 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 isSymmetric(self, root: Optional[TreeNode]) -> bool:
        if not root:
            return True
        
        def compare(left, right):
            if not left and not right:
                return True
            elif not left and right:
                return False
            elif left and not right:
                return False
            elif left.val != right.val:
                return False
            
            #continue comparing
            left_side = compare(left.left, right.right)
            right_side = compare(left.right,right.left)
            return left_side and right_side
        return compare(root.left, root.right)
  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值