首页 > 其他分享 >【力扣】对称二叉树

【力扣】对称二叉树

时间:2024-06-08 18:29:01浏览次数:14  
标签:right return nullptr 力扣 que 二叉树 对称 root left

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

示例 1:

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

示例 2:

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

队列层序遍历

流程

进行两次同步遍历,分别从根节点的左子树和右子树开始,然后比较每个节点的值

代码实现

class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        if (root == nullptr)
            return true;
        queue<TreeNode*> que;
        que.push(root->left);
        que.push(root->right);

        while (!que.empty()) {
            TreeNode* left = que.front();
            que.pop();
            TreeNode* right = que.front();
            que.pop();
            if (left == nullptr && right == nullptr)
                continue;
            if (left == nullptr || right == nullptr)
                return false;
            if (left->val != right->val)
                return false;
            que.push(left->left);
            que.push(right->right);

            que.push(left->right);
            que.push(right->left);
        }
        return true;
    }
};

递归后序遍历

流程

因为要遍历两棵树而且要比较内侧和外侧节点,所以准确的来说是一个树的遍历顺序是左右中,一个树的遍历顺序是右左中

代码实现

class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        return compare(root->left, root->right);
    }
    bool compare(TreeNode* left, TreeNode* right) {
        if (left == nullptr && right == nullptr)
            return true;
        if (left == nullptr || right == nullptr)
            return false;
        if (left->val != right->val)
            return false;
        return compare(left->left, right->right) &&
               compare(left->right, right->left);
    }
};

标签:right,return,nullptr,力扣,que,二叉树,对称,root,left
From: https://blog.csdn.net/Coldreams/article/details/139526165

相关文章

  • 【力扣】翻转二叉树
    给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。示例1:输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例2:输入:root=[2,1,3]输出:[2,3,1]示例3:输入:root=[]输出:[]递归法流程把每一个节点的左右孩子互换,就实现了整体翻转的效果。使用递归......
  • 【第四节】C/C++数据结构之树与二叉树
    目录一、基本概念与术语二、树的ADT三、二叉树的定义和术语四、平衡二叉树4.1解释4.2相关经典操作4.3代码展示一、基本概念与术语树(Tree)是由一个或多个结点组成的有限集合T。其中:1有一个特定的结点,称为该树的根(root)结点;2每个树都有且仅有一个特定的,称为......
  • 二叉树-数据结构
    父节点地址值左子节点地址右子节点地址每一个节点往下面,都是会分成左右两个树的结点度,就是子节点的数量二叉树就是生活中的树的概念树的高度是以最大的数量去数小的往左边放,大的往右边放以根节点为坐标,小于根节点的储存在左边,大的根节点放在右边和根节点相等的数,我们......
  • 力扣每日一题 6/7
    3038.相同分数的最大操作数目I[简单]题目:给你一个整数数组 nums ,如果 nums 至少 包含 2 个元素,你可以执行以下操作:选择 nums 中的前两个元素并将它们删除。一次操作的 分数 是被删除元素的和。在确保 所有操作分数相同 的前提下,请你求出 最多 能进行多少......
  • Day17| 110.平衡二叉树、 257. 二叉树的所有路径 、 404.左叶子之和
    110.平衡二叉树(优先掌握递归)再一次涉及到,什么是高度,什么是深度,可以巩固一下。题目链接/文章讲解/视频讲解:https://programmercarl.com/0110.平衡二叉树.html#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0,left=None,right=None):......
  • 144. 二叉树的前序遍历
    /***Definitionforabinarytreenode.*typeTreeNodestruct{*Valint*Left*TreeNode*Right*TreeNode*}*/funcpreorderTraversal(root*TreeNode)[]int{returnpre2(root)//vals:=[]int{}//pre1(root,&val......
  • Day16 | 104.二叉树的最大深度 、111.二叉树的最小深度 、222.完全二叉树的节点个数
    104.二叉树的最大深度(优先掌握递归)什么是深度,什么是高度,如何求深度,如何求高度,这里有关系到二叉树的遍历方式。大家要先看视频讲解,就知道以上我说的内容了,很多录友刷过这道题,但理解的还不够。题目链接/文章讲解/视频讲解:https://programmercarl.com/0104.二叉树的最大深度.ht......
  • 二叉链表---二叉树的简单实现
    实验内容将二叉链表视为森林的孩子兄弟链表,计算森林中叶子个数。代码实现#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>#include<stdlib.h>#include<string.h>#defineElemTypeinttypedefstructBtree{ ElemTypeelem; structBtree*lchild,*rchild......
  • n个结点组成的二叉树有多少种不同的形态
    在算法比赛或者408数据结构里面可能会出现问n个结点组成的二叉树有多少种不同的形态,因为二叉树不是平衡二叉树也不是排序二叉树,所以组成的情况包含非常多。下面讲解一下如何推断,主要还是利用动态规划的思想。我们定义f(n)表明结点为n的二叉树的形态数一个结点只有一种情况......
  • 力扣刷题记录: 1080. 根到叶路径上的不足节点
        本题是第140场周赛的Q3,LC竞赛分为1806。主要考察递归。我觉得这道题不值这个分。方法一.递归        我们将通过一个节点的“根-叶”路径分解为两部分,一部分为根到其父节点,另一部分为它到叶子节点。前一部分的val值之和是固定的,可以在递归中使用......