牛客小题练手 | 二叉树(三)
创始人
2024-03-30 23:05:50
0次

 🌈刷题,面试,求职,快来牛客网一起成为offer收割机!

点击注册收割offerd924065539c14401af169e0db320941a.png

一、BM32 合并二叉树

描述

已知两颗二叉树,将它们合并成一颗二叉树。合并规则是:都存在的结点,就将结点值加起来,否则空的位置就由另一个树的结点来代替。例如:
两颗二叉树是:
                                                   

 

合并后的树为: 

 

 

数据范围:树上节点数量满足 0 ≤n≤500,树上节点的值一定在32位整型范围内。

进阶:空间复杂度 O(1)) ,时间复杂度 O(n)

点击下方链接,跳转做题🔻BM32 合并二叉树icon-default.png?t=M85Bhttp://m6r.cn/QgJFm

思路:判断两棵树的相同位置的节点,以t1 树为基准树,当t1树的节点为空,t2树的节点不为空时,两者都不为空时,将t1.val + t2.val 即可  接下来t1 的左子树是:合并 t1左子树 t2左子树之后的左子树。t1 的右子树:是 合并 t1右子树 t2右子树之后的右子树,最终t1就是合并之后的根节点。

public class Solution {/*** * @param t1 TreeNode类 * @param t2 TreeNode类 * @return TreeNode类*/public TreeNode mergeTrees (TreeNode t1, TreeNode t2) {// write code hereif(t1 == null){return t2;}if(t2 == null){return t1;}t1.val = t1.val + t2.val;t1.left = mergeTrees(t1.left,t2.left);t1.right = mergeTrees(t1.right,t2.right);return t1;}
}

二、BM31 对称的二叉树 

描述

给定一棵二叉树,判断其是否是自身的镜像(即:是否对称)
例如:                                 下面这棵二叉树是对称的

下面这棵二叉树不对称。

 

数据范围:节点数满足0≤n≤1000,节点上的值满足∣val∣≤1000

要求:空间复杂度 O(n),时间复杂度 O(n)

BM31 对称的二叉树icon-default.png?t=M85Bhttp://m6r.cn/j1t4i

思路:判断二叉树的左右树是否空,如果左树和右树都为空,则返回 true ,左子树为空,右子树不为空或者右子树为空左子树不为空返回 false,对应的左子树的val值与右子树的 val值不相等,返回false ,递归左子树的左节点和右子树的右节点即可

public class Solution {boolean isSymmetrical(TreeNode pRoot) {if(pRoot == null){return true;}return isSymmetricalChild(pRoot.left,pRoot.right);  }private boolean isSymmetricalChild(TreeNode leftTree,TreeNode rightTree){if(leftTree == null && rightTree == null){return true;}if(leftTree!= null && rightTree == null || leftTree == null && rightTree != null){return false;}if(leftTree.val != rightTree.val){return false;}return isSymmetricalChild(leftTree.left,rightTree.right)&&isSymmetricalChild(leftTree.right,rightTree.left);}
}

三 、 左叶子之和

给定二叉树的根节点 root ,返回所有左叶子之和。

示例 1:

输入: root = [3,9,20,null,null,15,7] 
输出: 24 
解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24

思路 : 按照深读优先搜索,如果满足左节点的左右子树都为空即叶子节点时,将左叶子节点的 val 值储存在 sum中即可

class Solution {public int sumOfLeftLeaves(TreeNode root) {if(root == null){return 0;}Queue qu = new LinkedList<>();qu.offer(root);int sumLeaf = 0;while(!qu.isEmpty()){TreeNode cur = qu.poll();if(cur.left != null){if(isLeafNode(cur.left)){sumLeaf += cur.left.val;}else{qu.offer(cur.left);}}if(cur.right != null){qu.offer(cur.right);}}return sumLeaf;}public boolean isLeafNode(TreeNode root){return root.left == null && root.right == null;}
}

ced485cbb11e458d81a746890b32cf3f.gif

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...