首页 > 其他分享 >[刷题记录Day16]Leetcode二叉树

[刷题记录Day16]Leetcode二叉树

时间:2023-08-25 23:44:43浏览次数:46  
标签:子树 return int Day16 二叉树 minLeftDepth root Leetcode

No.1

题目

二叉树的最大深度

思路

  • 递归
  • 其实是后序遍历的方式

代码

public int maxDepth(TreeNode root) {  
    if (root == null)  
        return 0;  
  
    return Math.max(1 + maxDepth(root.left), 1 + maxDepth(root.right));  
}

No.2

题目

二叉树的最小深度

思路

  • 递归
  • 最小深度是指根节点到叶子节点的距离
  • 遇到其中一个左右子树缺失的情况要特殊处理,不与缺失的子树比较深度

代码

public int minDepth(TreeNode root) {  
    if (root == null)  
        return 0;  
  
    int minLeftDepth = minDepth(root.left);  
    int minRightDepth = minDepth(root.right);  
  
    // 只需要处理其中一个子树缺失的情况就可以了  
    // 缺失就返回另一颗子树的深度  
    if (minLeftDepth == 0 && minRightDepth !=0)  
        return 1 + minRightDepth;  
    if (minRightDepth == 0 && minLeftDepth != 0)  
        return 1 + minLeftDepth;  
  
    // 能兼容:1. 左右子树深度都不为0的情况 2. 左右子树深度都为0的情况  
    return 1 + Math.min(minLeftDepth, minRightDepth);  
}

No.3

题目

完全二叉树的节点个数

思路

  • 深度优先搜索之后序遍历
  • 没啥特别的

代码

public int traverse(TreeNode node) {  
    if (node == null)  
        return 0;  
  
    int leftNum = traverse(node.left);  
    int rightNum = traverse(node.right);  
    return 1 + leftNum + rightNum;  
}  
  
public int countNodes(TreeNode root) {  
    int count = 0;  
    if (root == null)  
        return count;  
  
    count = traverse(root);  
  
    return count;  
}

标签:子树,return,int,Day16,二叉树,minLeftDepth,root,Leetcode
From: https://www.cnblogs.com/tomatoQt/p/17658212.html

相关文章

  • [刷题记录Day18]Leetcode二叉树
    No.1题目找树左下角的值思路队列,层序遍历Deque既可以用作栈也可以用作队列,谨慎使用代码publicintfindBottomLeftValue(TreeNoderoot){Queue<TreeNode>queue=newLinkedList<>();queue.add(root);intresult=0;//记录最后一行第一个元素......
  • [刷题记录Day11]Leetcode
    No.1题目有效的括号思路奇数个符号一定不符合分析括号不匹配的可能性第一种情况,字符串里左方向的括号多余了,所以不匹配![[brackets0.png]]第二种情况,括号没有多余,但是括号的类型没有匹配上![[brackets1.png]]第三种情况,字符串里右方向的括号多余了,所以不匹配![[brac......
  • [刷题记录Day10]Leetcode
    No.1题目用栈实现队列思路模拟一个入栈一个出栈代码classMyQueue{privateStack<Integer>stackIn;privateStack<Integer>stackOut;publicMyQueue(){stackIn=newStack<>();stackOut=newStack<>();......
  • [刷题记录Day13]Leetcode
    No.1题目滑动窗口最大值思路编写单调队列类讲解代码classMonoQue{Deque<Integer>deque=newLinkedList<>();//弹出元素时,比较当前要弹出的值是否等于队列出口的值,相等则弹出//同时判断队列此时是否为空voidpoll(intval){......
  • [刷题记录Day8]Leetcode
    No.1题目反转字符串思路双指针,从头尾向中间遍历代码publicvoidreverseString(char[]s){ chartemp; intleft=0,right=s.length-1; while(left<right){ temp=s[left]; s[left]=s[right]; s[right]=temp; left++; right--; }}No.2......
  • [刷题记录Day9]Leetcode
    建议跳过No.1题目找出字符串中第一个匹配项的下标思路KMP代码No.2题目重复的子字符串思路KMP代码......
  • [刷题记录Day6]Leetcode哈希表
    No.1题目有效的字母异位词思路每个字符频率都相同,于是把字母表映射到长度为26的数组上代码publicbooleanisAnagram(Strings,Stringt){intlenS=s.length(),lenT=t.length();if(lenT!=lenS)returnfalse;int[]alphabet=newint[26]......
  • [刷题记录Day7]Leetcode哈希表
    No.1题目四数相加II思路很妙的办法:有四个数组A、B、C、D,用hashMap记录【A、B中数字之和】+【这些和出现的次数】,再遍历C、D中数字组合,寻找【0-C、D中数字之和】在hashMap中出现的次数,并累加本质上,这是把4个数组简化成了2个数组代码publicintfourSumCount(int[]nums1,......
  • 《算法笔记》树与二叉树专题练习
    1、复原二叉树(由前序和中序求后序)题目描述小明在做数据结构的作业,其中一题是给你一棵二叉树的前序遍历和中序遍历结果,要求你写出这棵二叉树的后序遍历结果。输入输入包含多组测试数据。每组输入包含两个字符串,分别表示二叉树的前序遍历和中序遍历结果。每个字符串由不重复的大写......
  • 力扣---1448. 统计二叉树中好节点的数目
    给你一棵根为 root 的二叉树,请你返回二叉树中好节点的数目。「好节点」X定义为:从根到该节点X所经过的节点中,没有任何节点的值大于X的值。 示例1:输入:root=[3,1,4,3,null,1,5]输出:4解释:图中蓝色节点为好节点。根节点(3)永远是个好节点。节点4->(3,4)是路......