首页 > 编程语言 >代码随想训练营第十四天(Python)| 层序遍历 10 、● 226.翻转二叉树 、101.对称二叉树 2

代码随想训练营第十四天(Python)| 层序遍历 10 、● 226.翻转二叉树 、101.对称二叉树 2

时间:2023-10-24 21:44:25浏览次数:32  
标签:node 10 right return self 第十四天 二叉树 root left

层序遍历
1、迭代法,使用队列

class Solution:
    def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
        res = []
        if root is None:
            return res
        queue = [root]
        while queue:
            n = len(queue)
            tmp = []
            for i in range(n):
                node = queue.pop(0)
                tmp.append(node.val)
                if node.left:
                    queue.append(node.left)
                if node.right:
                    queue.append(node.right)
            res.append(tmp)
        return res

2、递归

class Solution:
    def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
        levels = []
        if root is None:
            return levels
        self.helper(root, 0, levels)
        return levels

    def helper(self, node, level, levels):
        if not node:
            return
        if level == len(levels):
            levels.append([])
        levels[level].append(node.val)
        self.helper(node.left, level+1, levels)
        self.helper(node.right, level+1, levels)

226.翻转二叉树
1、递归前序遍历

class Solution:
    def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
        if root is None:
            return root
        root.left, root.right = root.right, root.left
        self.invertTree(root.left)
        self.invertTree(root.right)
        return root

2、前序遍历的统一写法

class Solution:
    def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
        stack = []
        if root:
            stack.append(root)
        while stack:
            node = stack.pop()
            if node:
                if node.right:
                    stack.append(node.right) # 右
                if node.left:
                    stack.append(node.left) # 左
                # 需要处理的节点
                stack.append(node)  # 中
                stack.append(None)  # 作标记
            else:
                # 处理节点
                node = stack.pop()
                node.left, node.right = node.right, node.left
        return root

101.对称二叉树 2
1、递归法

class Solution:
    def isSymmetric(self, root: Optional[TreeNode]) -> bool:
        if root is None:
            return True
        return self.compare(root.left, root.right)

    def compare(self, left, right):
        if not left and not right: # 一层一层排除
            return True
        if not (left and right):
            return False
        if left.val != right.val:
            return False
        return self.compare(left.left, right.right) and self.compare(left.right, right.left)

标签:node,10,right,return,self,第十四天,二叉树,root,left
From: https://www.cnblogs.com/yixff/p/17785808.html

相关文章

  • 大二打卡(10.23)
    今天做了什么:上午工程实训,我的老天爷,从圆钢上取材做个小爱心,累点,手疼点也没啥,但是他那共用手套好臭啊,我这辈子第一次知道,手套能发出一周不洗的袜子的味道,戴了一上午,手都入味儿了,用沐浴露洗了半天才没味儿下午的java,又是紧张刺激的一个下午,今天的小测试终于不跟数据库有关了,考一......
  • LeetCode 1089. 复写零
    复写零题目链接1089.复写零给你一个长度固定的整数数组arr,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。注意:请不要在超过该数组长度的位置写入元素。请对输入的数组就地进行上述修改,不要从函数返回任何东西。示例1:输入:arr=[1,0,2,3,0,4,5,0]输......
  • .NET周刊【10月第2期 2023-10-08】
    国内文章起风了,NCC云原生项目孵化计划https://www.cnblogs.com/liuhaoyang/p/ncc-the-wind-rises.html2016年,我和几位朋友发起了.NETCore中文学习组和ASP.NETCore文档翻译项目,随后创建了.NETCoreCommunity开源社区,吸引了近30个优秀的开源项目加入。然而,随着时间的推移,社区......
  • [Leetcode] 0100. 相同的树
    100.相同的树题目描述给你两棵二叉树的根节点p和q,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例1:输入:p=[1,2,3],q=[1,2,3]输出:true示例2:输入:p=[1,2],q=[1,null,2]输出:false示例3:......
  • 2023-10-24 react+ts 遍历双重对象嵌套数组
    useEffect(()=>{if(value){constarr=value;for(constkinarr){console.log(k,arr[k]);arr[k].key=arr[k].id;arr[k].title=arr[k].name;for(constk2inarr[k].children){arr[k2]......
  • 10月24日用socketserver模块TCP和UDP的服务器
    目录socketserver模块TCP协议的服务器以及客户端UDP协议的服务器以及客户端修改UDP修改版socketserver模块为什么要考虑这个模块呢?因为真实情况下不一定只有一个客户端连接,如果我使用socket模块就无法实现一个服务器连接多个客户端同时回复客户端的数据,下面先展示一下这个情况图......
  • 基于ZCU104的PS和PL数据交互例程(三):vivado中创建IP
    基于ZCU104的PS和PL数据交互例程(三):vivado中创建IP以创建带有AXI-LITE接口的IP为例子按照下面步骤创建这里注意,这里选择的NumberofRegisters,会在后面的代码里面对应slv_reg0,slv_reg1,...,slv_reg3打开IP目录,右键刚才的IP,选择EidtinIPPackagercontroller_v1_0......
  • 多年学习django经验markdown总结,基础到高手,共计50页,10大模块。 第(1)期
    Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以"插件"形式服务于整个框架,Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展性。它还强调快速开发和DRY(DoNotRepeatYourself)原......
  • 文心一言 VS 讯飞星火 VS chatgpt (120)-- 算法导论10.3 5题
    五、用go语言,设L是一个长度为n的双向链表,存储于长度为m的数组key、prev和next中。假设这些数组由维护双链自由表F的两个过程ALLOCATE-OBJECT和FREE-OBJECT进行管理。又假设m个元素中,恰有n个元素在链表L上,m-n个在自由表上。给定链表L和自由表F,试写出一个过程......
  • 231023校内赛
    T1区间题解很容易想到的一点是如果\(k\)足够大,那么把区间单独放到一个组里总比多个区间在一个组优对于多个区间来说,区间之间如果两两不包含的话这道题会是比较好做的就可以注意到如果一个大区间包含了一个小区间,那么大区间要么单独一组,要么和小区间同一组,这样会是比较优的......