首页 > 其他分享 >leetcode 101 对称二叉树 Simple

leetcode 101 对称二叉树 Simple

时间:2023-05-08 12:12:46浏览次数:41  
标签:right Simple self queue 二叉树 101 节点 append out

题目

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

输入:root = [1,2,2,3,4,4,3]
输出:true
输入:root = [1,2,2,null,3,null,3]
输出:false

题解

考察二叉树的遍历, 使用广度优先 BFS 方法.
BFS 的关键在于使用队列, 遍历树时, 读到的节点先入队, 再出队, 出队时读取值, 放入结果列表.

    out = []
    queue = []
    queue.append(node)
    while queue:
        this = queue.pop()
        # 出队列后, 判断这个元素是否为空, 不为空就先读取值, 再将子节点放入队列.
        if this:
            out.append(this.val)
            # 此处不用判断, 空节点也放入队列, 之后出队列再判断
            queue = [this.left] + queue
            queue = [this.right] + queue
        else:
            # 空节点直接输出
            out.append(None)

左右对称的判断, 只需要调整子节点入队列的左右顺序即可

完整代码

# 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 self.leftFirst(root) == self.rightFirst(root):
            return True
        else:
            return False

    # BFS
    def leftFirst(self, node):
        out = []
        queue = []
        queue.append(node)
        while queue:
            this = queue.pop()
            if this:
                out.append(this.val)
                # 不用判断, 空节点也放入队列, 之后输出处理
                queue = [this.left] + queue
                queue = [this.right] + queue
            else:
                # 空节点直接输出
                out.append(None)
        # print(out)
        return out

    def rightFirst(self, node):
        out = []
        queue = []
        queue.append(node)
        while queue:
            this = queue.pop()
            if this:
                out.append(this.val)
                queue = [this.right] + queue
                queue = [this.left] + queue
            else:
                out.append(None)
        return out

标签:right,Simple,self,queue,二叉树,101,节点,append,out
From: https://www.cnblogs.com/livebz/p/17381322.html

相关文章

  • (第26章)LinuxC本质中链表、二叉树和哈希表
    文章目录一、单链表的结构决定只能出栈,入栈1.链表的结构2.链表与数组的区别3.单链表所有基本操作代码(1)链表的插入(2)链表的查找(3)链表的删除(3)遍历整个链表(4)销毁整个链表4.习题5.C++NULL指针二、双向链表结构决定可以出队和入队1.在上面的单项链表上改改,得到双向链表2.改进双向链表:新增......
  • 平衡二叉树
    classSolution{public:boolres=true;intdfs(TreeNode*root)//返回以root为根节点的子树深度{if(root==NULL)return0;intl=dfs(root->left),r=dfs(root->right);if(abs(l-r)>1)res=false;returnmax(l......
  • poj1018(1)
    其实这道题我也没有完全的弄明白,糊里糊涂就ac了 大致题意:某公司要建立一套通信系统,该通信系统需要n种设备,而每种设备分别可以有m1、m2、m3、...、mn个厂家提供生产,而每个厂家生产的同种设备都会存在两个方面的差别:带宽bandwidths和价格prices。现在每种设备都各需要1个,考虑......
  • poj1013
    大致题意:有一打(12枚)硬币,其中有且仅有1枚假币,11枚真币用A~L作为各个硬币的代号假币可能比真币略轻,也可能略重现在利用天枰,根据Input输入的3次称量,找出假币,并输出假币是轻还是重。 解题思路:模拟法要考虑的情况较繁琐,可利用简单的逻辑推理进行解题。  注意Input一行代......
  • 线索二叉树
    线索二叉树为什么要研究线索二叉树?如何解决上面的问题?我们使用第三种方法二叉链表当中右很多空的指针域线索二叉树定义例子线索二叉树增设了这些指针之后,会难以区分是指向孩子的指针还是指向前驱结点或者后继结点的指针所以要加上两个标志域线索二叉树的结点结......
  • 日期与时间【Date/SimpleDateFormat/Calendar】
    视频链接:https://www.bilibili.com/video/BV1Cv411372m?p=121&vd_source=9140dcc493e34a9f4e95ca2f8f71bbd31Data1.1Date类概述Date类的对象在java中代表的是当前所在系统的此刻日期时间。Date的构造器publicDate():创建一个Date对象,代表的是系统当前此刻日期时间。Date......
  • Web|[SWPUCTF 2018]SimplePHP
    访问是一个文件上传页面,点击查看文件页面可以发现特殊的链接,应该存在文件包含http://dfef288e-1b73-48e0-9458-a4e733c40c38.node4.buuoj.cn:81/file.php?file=查看源码发现一些文件,页面内容提示flag在f1ag.php中index.phpfile.phpupload_file.phpf1ag.php直接包含f1a......
  • 计算二叉树深度
    解决思路如果是空树,则深度为0;否则,递归计算左子树的深度记为m,递归计算右子树的深度记为n,二叉树的深度则为m与n的较大者加1。intDepth(BiTreeT){if(T==NULL)return0;else{m=Depth(T->lchild);n=Depth(T->rchild);if(m>n)return(m+1);......
  • 二叉树全分析(超详细总结建议收藏)
    个人主页:【......
  • 二叉树的操作
    二叉树的操作二叉树的复制如果是空树,递归结束否则,申请新结点的空间,复制根结点递归复制左子树递归复制右子树代码实现#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<vector>#include<cstring>#include<unordered_se......