前言
###我做这类文章一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?建议灵神的题单和代码随想录)和记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!
习题
1.具有所有最深节点的最小子树
题目链接: 865. 具有所有最深节点的最小子树 - 力扣(LeetCode)
题面:
代码:
java
/**
* 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 {
TreeNode ans;
int maxdep = 0;
int count = 0;
public TreeNode subtreeWithAllDeepest(TreeNode root) {
ans = root;
recursion2(root,0);
recursion3(root,0);
recursion(root,0);
return ans;
}
public int recursion(TreeNode node,int u){
if(node.left==null&&node.right==null){
if(u==maxdep)return 1;
return 0;
}
int l = 0;
int r = 0;
if(node.left!=null){
l = recursion(node.left,u+1);
}
if(node.right!=null){
r = recursion(node.right,u+1);
}
int sum = l+r;
if(sum==count){
if(count==1){
if(l==1){
ans = node.left;
}else{
ans = node.right;
}
return 999;
}else{
ans = node;
return 999;
}
}
return l+r;
}
public void recursion3(TreeNode node,int u){
if(node.left==null&&node.right==null){
if(u==maxdep)count++;
}
if(node.left!=null){
recursion3(node.left,u+1);
}
if(node.right!=null){
recursion3(node.right,u+1);
}
}
public void recursion2(TreeNode node,int u){
if(node.left==null&&node.right==null){
if(u>maxdep)maxdep = u;
}
if(node.left!=null){
recursion2(node.left,u+1);
}
if(node.right!=null){
recursion2(node.right,u+1);
}
}
}
后言
上面是数据结构相关的习题,下一篇文章会将其他相关的习题。