力扣-数据结构-13【算法学习day.84】
前言
###我做这类文章一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?建议灵神的题单和代码随想录)和记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!
习题
1.第K大的完美二叉子树的大小
题目链接:3319. 第 K 大的完美二叉子树的大小 - 力扣(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 {
// Map<Integer,Integer> map = new HashMap<>();
int count = 0;
int[] arr = new int[2005];
public int kthLargestPerfectSubtree(TreeNode root, int k) {
recursion(root);
Arrays.sort(arr);
int index = 2004;
int max = arr[index];
int dcount = 0;
while(index>=0){
dcount++;
if(dcount==k&&arr[index]!=0){
return arr[index];
}
else if(dcount>k){
return -1;
}
if(arr[index]==0){
return -1;
}
index--;
}
return arr[index]==0?-1:arr[index];
}
public int[] recursion(TreeNode node){
if(node==null){
return new int[]{0,1};
}
int[] l = recursion(node.left);
int[] r = recursion(node.right);
int flag = l[0]+r[0]+1;
if(l[0]==r[0]&&l[1]==1&&r[1]==1){
arr[count++] = flag;
return new int[]{flag,1};
}
return new int[]{flag,0};
}
}
后言
上面是数据结构相关的习题,下一篇文章会将其他相关的习题。