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

力扣101 对称二叉树

时间:2023-01-25 23:11:20浏览次数:39  
标签:遍历 return 力扣 right 二叉树 false 101 节点 left

题目:

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

示例:

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

思路:

 

   对于二叉树是否对称,要比较的是根节点的左子树与右子树是不是相互翻转的,理解这一点就知道了其实我们要比较的是两个树(这两个树是根节点的左右子树),所以在递归遍历的过程中,也是要同时遍历两棵树。正是因为要遍历两棵树而且要比较内侧和外侧节点,所以准确的来说是一个树的遍历顺序是左右中,一个树的遍历顺序是右左中。但都可以理解算是后序遍历,尽管已经不是严格上在一个树上进行遍历的后序遍历了。

递归三部曲:

(1)确定递归函数的参数和返回值

因为我们要比较的是根节点的两个子树是否是相互翻转的,进而判断这个树是不是对称树,所以要比较的是两个树,参数自然也是左子树节点和右子树节点。返回值自然是bool类型。

代码如下:

private boolean compare(TreeNode left, TreeNode right) 

(2)确定终止条件

要比较两个节点数值相不相同,首先要把两个节点为空的情况弄清楚!否则后面比较数值的时候就会操作空指针了。

节点为空的情况有:

  • 左节点为空,右节点不为空,不对称,return false
  • 左不为空,右为空,不对称 return false
  • 左右都为空,对称,返回true

此时已经排除掉了节点为空的情况,那么剩下的就是左右节点不为空:

  • 左右都不为空,比较节点数值,不相同就return false

此时左右节点不为空,且数值也不相同的情况我们也处理了。

代码如下:

if (left == null && right != null) {
    return false;
}
if (left != null && right == null) {
    return false;
}
if (left == null && right == null) {
    return true;
}
if (left.val != right.val) {
    return false;
}

把以上情况都排除之后,剩下的就是 左右节点都不为空,且数值相同的情况。

(3)确定单层递归的逻辑

此时才进入单层递归的逻辑,单层递归的逻辑就是处理 左右节点都不为空,且数值相同的情况。

  • 比较二叉树外侧是否对称:传入的是左节点的左孩子,右节点的右孩子。
  • 比较内测是否对称,传入左节点的右孩子,右节点的左孩子。
  • 如果左右都对称就返回true ,有一侧不对称就返回false 。

代码如下:

// 比较外侧
boolean compareOutside = compare(left.left, right.right);// 左子树:左、 右子树:右
// 比较内侧
boolean compareInside = compare(left.right, right.left);// 左子树:右、 右子树:左
return compareOutside && compareInside;// 左子树:中、 右子树:中(逻辑处理)

可以看出使用的遍历方式,左子树左右中,右子树右左中,所以我把这个遍历顺序也称之为“后序遍历”。

 

标签:遍历,return,力扣,right,二叉树,false,101,节点,left
From: https://www.cnblogs.com/cjhtxdy/p/17067410.html

相关文章

  • 刷刷刷 Day 21 | 236. 二叉树的最近公共祖先
    236.二叉树的最近公共祖先LeetCode题目要求给定一个二叉树,找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树T的两个节点p、q,......
  • 回文数-力扣
     回文数-力扣来源:力扣(LeetCode)链接:https://leetcode.cn/problems/palindrome-number著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。题目描述......
  • 二分查找的三种形式&两道力扣
    前言过年前刷Leetcode的时候遇到这样一道题目:354.俄罗斯套娃信封问题-力扣(Leetcode)其中使用patiencesorting这个算法的做法中,因为牌堆顶是有序数组,所以可以使用二分......
  • [LeetCode] 1101. The Earliest Moment When Everyone Become Friends
    Therearenpeopleinasocialgrouplabeledfrom 0 to n-1.Youaregivenanarray logs where logs[i]=[timestampi,xi,yi] indicatesthat xi and ......
  • 力扣---1306. 跳跃游戏 III
    这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处。当你位于下标 i 处时,你可以跳到 i+arr[i]或者i-arr[i]。请你判断自己是否能够跳到对......
  • 刷刷刷 Day 20 | 617. 合并二叉树
    617.合并二叉树LeetCode题目要求给你两棵二叉树:root1和root2。想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两......
  • 刷刷刷 Day 20 | 654. 最大二叉树
    654.最大二叉树LeetCode题目要求给定一个不重复的整数数组 nums。 最大二叉树 可以用下面的算法从 nums递归地构建:创建一个根节点,其值为 nums中的最大值。递......
  • 二叉树TwT
    L2-011玩转二叉树给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设......
  • 刷刷刷 Day 18 | 106. 从中序与后序遍历序列构造二叉树
    106.从中序与后序遍历序列构造二叉树LeetCode题目要求给定两个整数数组inorder和postorder,其中inorder是二叉树的中序遍历,postorder是同一棵树的后序遍历,请你构......
  • #10166. 「一本通 5.3 练习 1」数字游戏
    #10166.「一本通5.3练习1」数字游戏-题目-LibreOJ(loj.ac)数位DP模板DP维度:pos,sum,lim,zerosum表示当前所有枚举的数之和%MOD后的值,否则dp这维度是存不下滴如果......