首页 > 编程语言 >代码随想录算法训练营第十四天(一)| 226.翻转二叉树 101. 对称二叉树

代码随想录算法训练营第十四天(一)| 226.翻转二叉树 101. 对称二叉树

时间:2024-08-13 22:57:48浏览次数:9  
标签:right TreeNode t2 随想录 第十四天 二叉树 root 节点 left

226.翻转二叉树

题目:

给你一棵二叉树的根节点 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 = []
输出:[]

提示:

  • 树中节点数目范围在 [0, 100] 内
  • -100 <= Node.val <= 100

思路:

其实就是交换一下左右节点,然后再递归的交换左节点,右节点

  1. 如果根节点为空,直接返回空。
  2. 否则,递归翻转左子树和右子树。
  3. 交换左右子树的位置。

我们可以总结出递归的两个条件如下:

终止条件:当前节点为 null 时返回
交换当前节点的左右节点,再递归的交换当前节点的左节点,递归的交换当前节点的右节点

上代码:

class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if (root == NULL) {
            return NULL;
        }
        TreeNode* left = invertTree(root->left);
        TreeNode* right = invertTree(root->right);
        root->left = right;
        root->right = left;
        return root;
    }
};

101. 对称二叉树

题目:

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

示例 1:

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

示例 2:

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

提示:

  • 树中节点数目在范围 [1, 1000] 内
  • -100 <= Node.val <= 100

思路:

首先判断根节点是否为空,如果为空则直接返回 true,因为空树是对称的。

接下来创建一个队列 q,将根节点的左右子节点分别入队。

然后进入一个循环,当队列不为空时,取出队列中的两个节点 t1 和 t2,进行以下判断:

  1. 如果 t1 和 t2 都为空,说明当前层的两个节点都是空的,继续下一层的判断;
  2. 如果 t1 和 t2 中有一个为空,另一个不为空,说明不对称,返回 false;
  3. 如果 t1 和 t2 的值不相等,说明不对称,返回 false;
  4. 如果以上条件都不满足,说明当前层的两个节点对称,将它们的左右子节点分别按相反的顺序入队,继续下一层的判断。

最后,如果循环结束后没有提前返回 false,说明整个二叉树是对称的,返回 true。

上代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left),
 * right(right) {}
 * };
 */
class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        if (root == NULL)
            return true;

        queue<TreeNode*> q;
        q.push(root->left);
        q.push(root->right);

        while (!q.empty()) {
            TreeNode* t1 = q.front();
            q.pop();
            TreeNode* t2 = q.front();
            q.pop();

            if (t1 == NULL && t2 == NULL)
                continue;
            if (t1 == NULL || t2 == NULL)
                return false;
            if (t1->val != t2->val)
                return false;

            q.push(t1->left);
            q.push(t2->right);
            q.push(t1->right);
            q.push(t2->left);
        }

        return true;
    }
};

标签:right,TreeNode,t2,随想录,第十四天,二叉树,root,节点,left
From: https://blog.csdn.net/xiaowutongxue666/article/details/141174826

相关文章

  • 代码随想录Day14
    226.翻转二叉树给你一棵二叉树的根节点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=[]输出:[]提示:树中节点数目范围在[0,100]内-100<=Node.val<=100......
  • 25版王道数据结构课后习题详细分析 第五章 树与二叉树 5.1 树的基本概念
     一、单项选择题————————————————————————————————————————解析:树是一种分层结构,它特别适合组织那些具有分支层次关系的数据。正确答案:D————————————————————————————————————————解......
  • 代码随想录算法训练营第 42 天 |LeetCode 188.买卖股票的最佳时机IV LeetCode309.最佳
    代码随想录算法训练营Day42代码随想录算法训练营第42天|LeetCode188.买卖股票的最佳时机IVLeetCode309.最佳买卖股票时机含冷冻期LeetCode714.买卖股票的最佳时机含手续费目录代码随想录算法训练营前言LeetCode188.买卖股票的最佳时机IVLeetCode309.最佳买卖......
  • 代码随想录算法训练营第十三天|二叉树理论基础,144.二叉树的前序遍历,145.二叉树的中序
    day12周日放假二叉树理论基础:文章链接:代码随想录文章摘要:满二叉树定义:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。完全二叉树定义:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一......
  • 代码随想录day28 || 122 买卖最佳时机2,55 跳跃游戏,45 跳跃游戏2,1005 k次取反最大数组
    122买卖股票最佳时机2funcmaxProfit(prices[]int)int{ //思路,因为支持同一天买入卖出,所以利润最大应该是所有正利润的加总结果 varsumint fori:=1;i<len(prices);i++{ ifprices[i]-prices[i-1]>0{ sum+=prices[i]-prices[i-1] } } returns......
  • 代码随想录Day12
    二叉树遍历分为前序、中序、后续、层序四种其中前中后序属于深度优先搜索,层序属于广度优先搜索前序遍历顺序:根节点->左子树->右子树中序遍历顺序:左子树->根节点->右子树后序遍历顺序:左子树->右子树->根节点不难发现,前中后其实就是根节点在遍历中的位置至于层序遍历,顾名......
  • 数据结构:链式二叉树(1)
    目录前言一、链式二叉树的遍历1.1前序遍历1.2中序遍历 1.3后序遍历二、层序遍历前言  通过前面关于二叉树的基础知识我们知道链式二叉树分为二叉链和三叉链,本篇主要讲的是二叉链的实现,在此之前,为了方便实现链式二叉树的各个功能,我们需要先手动快速创建一个链......
  • 「代码随想录算法训练营」第三十五天 | 动态规划 part8
    121.买卖股票的最佳时机题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/文章讲解:https://programmercarl.com/0121.买卖股票的最佳时机.html题目难度:简单视频讲解:https://www.bilibili.com/video/BV1Xe4y1u77q题目状态:有一半的思路思路一:贪心对......
  • 代码随想录day27 || 455 分饼干,376 摆动序列,53 最大子序列和
    分饼干funcfindContentChildren(g[]int,s[]int)int{ //第一思路,双指针暴力解法 varcountint varused2=make([]bool,len(s)) g=quicksort(g) s=quicksort(s) for_,child:=rangeg{ foridx,cookie:=ranges{ if!used2[idx]&&cookie>=......
  • 数据结构----二叉树
              小编会一直更新数据结构相关方面的知识,使用的语言是Java,但是其中的逻辑和思路并不影响,如果感兴趣可以关注合集。    希望大家看完之后可以自己去手敲实现一遍,同时在最后我也列出一些基本和经典的题目,可以尝试做一下。大家也可以自己去力扣或者......