首页 > 编程语言 >代码随想录算法训练营第十六天 | 104.二叉树的最大深度| 559.n叉树的最大深度|222.完全二叉树的节点个数|111.二叉树的最小深度

代码随想录算法训练营第十六天 | 104.二叉树的最大深度| 559.n叉树的最大深度|222.完全二叉树的节点个数|111.二叉树的最小深度

时间:2024-02-17 10:00:27浏览次数:35  
标签:示例 随想录 二叉树 深度 null root 节点

222. 完全二叉树的节点个数

  已解答 简单  

相关标签

相关企业  

给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。

完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。

 

示例 1:

输入:root = [1,2,3,4,5,6]
输出:6

示例 2:

输入:root = []
输出:0

示例 3:

输入:root = [1]
输出:1

 

提示:

  • 树中节点的数目范围是[0, 5 * 104]
  • 0 <= Node.val <= 5 * 104
  • 题目数据保证输入的树是 完全二叉树

 

进阶:遍历树来统计节点是一种时间复杂度为 O(n) 的简单解决方案。你可以设计一个更快的算法吗?


func countNodes(root *TreeNode) int { if root == nil { return0 } left, right := root.Left, root.Right leftMaxDepht, rightMaxDepht := 0, 0 for left != nil { left = left.Left leftMaxDepht++ } for right != nil { right = right.Right rightMaxDepht++ } //如果左深与右深一致,则用完全二叉树特性 1<<n-1 直接返回 if leftMaxDepht == rightMaxDepht { return1<<(leftMaxDepht+1) - 1 } return1 + countNodes(root.Left) + countNodes(root.Right) }

 

111. 二叉树的最小深度

  已解答 简单  

相关标签

相关企业  

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

说明:叶子节点是指没有子节点的节点。

 

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:2

示例 2:

输入:root = [2,null,3,null,4,null,5,null,6

 



func minDepth(root *TreeNode) int { if root == nil { return0 } leftHeight := minDepth(root.Left) rightHeight := minDepth(root.Right) if root.Left == nil { return rightHeight + 1 } if root.Right == nil { return leftHeight + 1 } if leftHeight > rightHeight { return rightHeight + 1 } return leftHeight + 1 }
104. 二叉树的最大深度   已解答 简单   相关标签 相关企业  

给定一个二叉树 root ,返回其最大深度。

二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。

 

示例 1:

 

输入:root = [3,9,20,null,null,15,7]
输出:3

示例 2:

输入:root = [1,null,2]
输出:2

 

提示:

  • 树中节点的数量在 [0, 104] 区间内。
  • -100 <= Node.val <= 100

559. N 叉树的最大深度

  已解答 简单  

相关标签

相关企业  

给定一个 N 叉树,找到其最大深度。

最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。

N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。

 

示例 1:

输入:root = [1,null,3,2,4,null,5,6]
输出:3

示例 2:

输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
输出:5

 

提示:

  • 树的深度不会超过 1000 。
  • 树的节点数目位于 [0, 104] 之间。

func maxDepth(root *Node) int { if root == nil { return0 } varchildMaxDepthint for_, child := range root.Children { cur := maxDepth(child) if cur > childMaxDepth { childMaxDepth = cur } } return childMaxDepth + 1 }

标签:示例,随想录,二叉树,深度,null,root,节点
From: https://www.cnblogs.com/suxinmian/p/18017740

相关文章

  • 代码随想录算法训练营第十五天 | 层次遍历 | 101. 对称二叉树 | 226.翻转二叉树
    226.翻转二叉树 已解答简单 相关标签相关企业 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例1:输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例2:输入:root=[2,1,3]输出:[2,3,1]示例3:输入:root=[]输出:[......
  • 代码随想录 day51 打家劫舍
    打家劫舍当前位置偷与不偷取决于上一家的状态也就是有递推式考虑dp当前位置如果偷就是找i-2的位置的钱+当前的nums[i]如果不偷就是i-2的钱两个情况取最大值初始值如果只有0或1家人就特殊处理2家及以上初始0就是nums[0]1就是max(nums[0],nums[1])打家劫舍I......
  • 力扣递归 广度优先搜索之102. 二叉树的层序遍历
    classSolution{   List<List<Integer>>result=newArrayList<>();   publicList<List<Integer>>levelOrder(TreeNoderoot){       if(root==null){           returnresult;       }       traverse(root,0);    ......
  • 力扣递归之 543. 二叉树的直径
    classSolution{//二叉树直径其实就是根到左子树最深+根到右子树最深  intdiameter;    publicintdiameterOfBinaryTree(TreeNoderoot){    calculateDepth(root);    returndiameter;  }    privateintcalculateDe......
  • 力扣递归之101. 对称二叉树
    classSolution{  publicbooleanisSymmetric(TreeNoderoot){    if(root==null){      returntrue;    }    returnisMirror(root.left,root.right);  }    publicbooleanisMirror(TreeNodeleft,Tr......
  • 树状数组-三色二叉树 题解
    题目在这里————————————————————————————————三色二叉树首先题面写的很清楚了是一道树状数组题因为这题的输入方式很特别按二叉树序列所以在输入上要特殊处理如下voidread(intx){//读入+存图以左右子树为形式如l[x]=y即y为x左子树......
  • (18/60)找树左下角的值、路径总和、从中序与后序遍历构造二叉树
    找树左下角的值leetcode:513.找树左下角的值层序迭代法思路层序遍历,每次更新result为每层最左侧元素。复杂度分析时间复杂度:遍历,O(N)。空间复杂度:队列层序遍历,树*似完全二叉树时O(N),树极倾斜时O(logN)。注意点略代码实现/***Definitionforabinarytreenode.......
  • 代码随想录 day51 单词拆分
    单词拆分这里递推式的意义是dp[i]:字符串长度为i的话,dp[i]为true,表示可以拆分为一个或多个在字典中出现的单词。如果确定dp[j]是true,且[j,i]这个区间的子串出现在字典里,那么dp[i]一定是true。(j<i)。所以递推公式是if([j,i]这个区间的子串出现在字典里&&dp[j]是t......
  • 二叉树
    二叉树「二叉树binarytree」是一种非线性数据结构,代表着祖先与后代之间的派生关系,体现着“一分为二”的分治逻辑。与链表类似,二叉树的基本单元是节点,每个节点包含:值、左子节点引用、右子节点引用。/*二叉树节点结构体*/typedefstructTreeNode{intval;//节点值int......
  • 二叉树遍历问题模板
    在二叉树遍历问题中,有三种常见的遍历方式:前序遍历、中序遍历和后序遍历。以下是这三种遍历方式的递归模板:1.前序遍历(PreorderTraversal):defpreorderTraversal(root):ifnotroot:return[]result=[]result.append(root.val)#处理当前节点......