c++怎么定义树的高度
发表于:2025-01-30 作者:千家信息网编辑
千家信息网最后更新 2025年01月30日,这篇"c++怎么定义树的高度"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"c++怎么
千家信息网最后更新 2025年01月30日c++怎么定义树的高度
这篇"c++怎么定义树的高度"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"c++怎么定义树的高度"文章吧。
算法:
这一类题目很简单,不过却是树的最基本操作之一,引申为判断树是不是平衡二叉树。
一般做法是,计算二叉树的左右子树的高度+1,然后取它们的最大值或者最小值。
题目1:高度平衡二叉树的定义
代码实现:
/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ // 一棵平衡二叉树,左右两棵子树的高度差的绝对值不超过1 // 备注:其中任意一个节点如果不满足平衡二叉树时,那么这棵树就不是平衡二叉树了,此时我们可以直接返回flasefunc isBalanced(root *TreeNode) bool { if root == nil { // nil表示的是平衡二叉树 return true } // 1.用来计算当前节点的左右子树高度差是1 lH := maxDepth(root.Left) rH := maxDepth(root.Right) if abs(lH-rH) > 1{ return false } // 2. 进一步判断左子树是不是平衡二叉树 if !isBalanced(root.Left) { return false } // 3. 进一步判断右子树是不是平衡二叉树 return isBalanced(root.Right)}// 典型的计算二叉树的高度,当前左右子树的最大高度+1func maxDepth(root *TreeNode) int { if root == nil { return 0 } return max(maxDepth(root.Left),maxDepth(root.Right)) + 1}func max(a,b int) int { if a > b { return a } return b}func abs(a int) int { if a < 0 { return -a } return a}
题目2:找出二叉树的最大深度
代码实现:
/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */func maxDepth(root *TreeNode) int { if root == nil { return 0 } left := maxDepth(root.Left) right := maxDepth(root.Right) if left > right { return left + 1 } return right + 1}/*递归算法:左右子树的高度最大数值+1*/
题目3:找出二叉树的最小深度
代码实现:
/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */func minDepth(root *TreeNode) int { if root == nil { return 0 } if root.Left ==nil && root.Right == nil { return 1 } min := int(^uint(0) >> 1) if root.Left != nil { // 对于一个孩子的节点,要计算有孩子节点的高度 h := minDepth(root.Left) if min > h { min = h } } if root.Right != nil { h := minDepth(root.Right) if min > h { min = h } } return min+1}
题目4:N叉树的最大深度
代码实现:
/** * Definition for a Node. * type Node struct { * Val int * Children []*Node * } */func maxDepth(root *Node) int { if root == nil { return 0 } var hs []int for _, n := range root.Children { h := maxDepth(n) hs = append(hs,h) } max := 0 for _,h:=range hs { if h > max { max = h } } return max + 1}
以上就是关于"c++怎么定义树的高度"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。
高度
子树
最大
内容
题目
代码
节点
c++
深度
最小
孩子
文章
知识
算法
篇文章
进一
价值
做法
典型
基本操作
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
疾控网络安全培训
江北区软件开发培训
oracle数据库的链接
悠然解说服务器生存1
焦作哪个学校有计算机网络技术
碧婷小说软件开发
软件开发以后有钱没
电力运维平台软件开发
经开区库存管理软件开发公司
步兵配备服务器
数据库国语
网络安全法 现金贷
lisp实现数据库
如何进行app软件开发
外文数据库的检索方法与技术
云服务器手机淘宝
天津云主机品牌云服务器
四川应用软件开发定制
数据库变卡
魔兽世界 无尽之海服务器
护苗网络安全留言
计算机三级网络技术配置
ource创投数据库
更换备调前置服务器的安全措施
步兵配备服务器
厦门软件开发百度贴吧
网络安全工程师月薪3万
str函数示例数据库
网络安全等级备案号
徐汇区市场软件开发代理商