力扣-数据结构-11【算法学习day.82】
前言
###我做这类文章一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?建议灵神的题单和代码随想录)和记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!
习题
1.单值二叉树
题目链接:965. 单值二叉树 - 力扣(LeetCode)
题面:
代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
Boolean ans = true;
int flag = 0;
public boolean isUnivalTree(TreeNode root) {
flag = root.val;
recursion(root);
return ans;
}
public void recursion(TreeNode node){
if(node==null||ans==false)return;
if(node.val!=flag){
ans = false;
return;
}
recursion(node.left);
recursion(node.right);
}
}
2.翻转等价二叉树
题目链接: 951. 翻转等价二叉树 - 力扣(LeetCode)
题面:
思路:模拟题目中求是否是等价二叉树的过程
代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
Boolean ans = true;
public boolean flipEquiv(TreeNode root1, TreeNode root2) {
if((root1==null&&root2!=null)||(root1!=null&&root2==null))return false;
recursion(root1,root2);
return ans;
}
public void recursion(TreeNode node1,TreeNode node2){
if(node1==null||ans==false)return;
if(node1.val!=node2.val){
ans = false;
return;
}
if(node1.left!=null&&node1.right!=null){
if(node2.left==null||node2.right==null){
ans = false;
return;
}
if(node2.left.val==node1.right.val&&node2.right.val==node1.left.val){
reverse(node1);
}else if(node1.left.val!=node2.left.val||node1.right.val!=node2.right.val){
ans = false;
return;
}
}else if(node1.left!=null){
if((node2.left!=null&&node2.right!=null)||(node2.left==null&&node2.right==null)){
ans = false;
return;
}
int k = node1.left.val;
if(node2.left!=null){
if(k!=node2.left.val){
ans = false;
return;
}
}else{
int r2 = node2.right.val;
if(k==r2){
reverse(node1);
}else{
ans = false;
return;
}
}
}else if(node1.right!=null){
if((node2.left!=null&&node2.right!=null)||(node2.left==null&&node2.right==null)){
ans = false;
return;
}
int k = node1.right.val;
if(node2.right!=null){
if(k!=node2.right.val){
ans = false;
return;
}
}else{
int r2 = node2.left.val;
if(k==r2){
reverse(node1);
}else{
ans = false;
return;
}
}
}else{
if(node2.left!=null||node2.right!=null){
ans = false;
return;
}
}
if(node1.left!=null){
recursion(node1.left,node2.left);
}
if(node1.right!=null){
recursion(node1.right,node2.right);
}
}
public void reverse(TreeNode node){
TreeNode left = node.left;
TreeNode right = node.right;
node.left = right;
node.right = left;
}
}
后言
上面是数据结构相关的习题,下一篇文章会将其他相关的习题。