既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
public class Solution {
boolean isSymmetrical(TreeNode pRoot) {
//先判断根节点
if(pRoot==null) return true;
Queue<TreeNode> deque = new LinkedList<>();
deque.offer(pRoot.left);
deque.offer(pRoot.right);
while (!deque.isEmpty()) {
TreeNode leftNode = deque.poll();
TreeNode rightNode = deque.poll();
if (leftNode == null && rightNode == null) {
continue;
}
if (leftNode == null && rightNode != null) {
return false;
}
if (leftNode != null && rightNode == null) {
return false;
}
if (leftNode.val != rightNode.val) {
return false;
}
// 这里顺序与使用Deque不同
deque.offer(leftNode.left);
deque.offer(rightNode.right);
deque.offer(leftNode.right);
deque.offer(rightNode.left);
}
return true;
}
}
⛱️相同的二叉树
相同的二叉树
给定两个根结点分别为 root1root1 和 root2root2 二叉树,请判断这两棵树是否完全相同。
数据范围:
−104≤Node.val≤104−10
4
≤Node.val≤10
4
两棵树上的节点数目都在范围 [0, 100] 内
🥪🥪递归
1️⃣我们先比较根节点
2️⃣如果两颗二叉树的根节点都为空,则返回true
3️⃣如果两棵树,其中一个根节点为空,另一个非空,则返回false
4️⃣如果两棵树根节点都非空,则比较数值,不相等返回false
5️⃣如果根节点数值相同,则递归比较左右子树
6️⃣左右子树等相同则返回true,否则返回false
🥪🥪迭代法(使用队列)
1️⃣我们可以用两个队列来解决这个问题,队列保存树的结点
2️⃣逐层把二叉树的结点加入队列中
3️⃣判断逻辑和递归是一样的
⛱️判断t1树中是否有与t2树完全相同的子树
🥪🥪题目描述
给定彼此独立的两棵二叉树,树上的节点值两两不同,判断 t1 树是否有与 t2 树完全相同的子树。
子树指一棵树的某个节点的全部后继节点
数据范围:树的节点数满足 0 < n \le 5000000<n≤500000,树上每个节点的值一定在32位整型范围内
进阶:空间复杂度: O(1)O(1),时间复杂度 O(n)O(n)
🥪🥪思路
其实这道题目和判断两棵树是否相同是差不多思路的,两棵树A,B,B如果满足是A的子树,那么就会有三种情况
1️⃣两棵树相同
2️⃣B是A的左子树(B和A的左子树相同)
3️⃣B是A的右子树(B和A的右子树相同)
我们可以看出解决这个大问题,其实有可以划分成若干个相同的小问题,可以使用递归来解决
🥪🥪代码
import java.util.*;
/\*
\* public class TreeNode {
\* int val = 0;
\* TreeNode left = null;
\* TreeNode right = null;
\* }
\*/
public class Solution {
/\*\*
\*
\* @param root1 TreeNode类
\* @param root2 TreeNode类
\* @return bool布尔型
\*/
public boolean isContains (TreeNode root1, TreeNode root2) {
// write code here
if (root1==null||root2==null){
return false;
}
return sameRootDfs(root1,root2)||isContains(root1.left,root2)||isContains(root1.right,root2);
}
private boolean sameRootDfs(TreeNode A, TreeNode B){
//这里如果B为空并且A为空,表示A和B已经遍历完成,并且经过了A.val!=B.val的考验
if(A==null&&B==null){
return true;
}
//1.A为空表示B不为空,表示两者不同
//2.B为空原理和1一样
//3.A和B的值不一样,表示两者不同
if (A==null||B==null||A.val!=B.val){
return false;
}
//当前节点比较完之后还要继续判断左右子节点
return sameRootDfs(A.left,B.left)&&sameRootDfs(A.right,B.right);
}
}
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
入研究,那么很难做到真正的技术提升。**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!