2021-03-21:给定一棵二叉树的头节点head,求以head为头的树中,最小深度是多少?
2021-03-21:给定一棵二叉树的头节点head,求以head为头的树中,最小深度是多少?
福大大 答案2021-03-21:
1.递归。
2.莫里斯遍历。
代码用golang编写,代码如下:
package main
import "fmt"
func main() {
head := &TreeNode{}
head.Left = &TreeNode{}
head.Right = &TreeNode{}
head.Right.Right = &TreeNode{}
ret := minHeight1(head)
fmt.Println("1.递归:", ret)
ret = minHeight2(head)
fmt.Println("2.莫里斯遍历:", ret)
}
//Definition for a binary tree node.
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
const INT_MAX = int(^uint(0) >> 1)
func minHeight1(head *TreeNode) int {
if head == nil {
return 0
}
leftVal := minHeight1(head.Left)
rightVal := minHeight1(head.Right)
return 1 + getMin(leftVal, rightVal)
}
// 根据morris遍历改写
func minHeight2(head *TreeNode) int {
if head == nil {
return 0
}
cur := head
var mostRight *TreeNode
curLevel := 0
minHeight := INT_MAX
for cur != nil {
mostRight = cur.Left
if mostRight != nil {
rightBoardSize := 1
for mostRight.Right != nil && mostRight.Right != cur {
rightBoardSize++
mostRight = mostRight.Right
}
if mostRight.Right == nil { // 第一次到达
curLevel++
mostRight.Right = cur
cur = cur.Left
continue
} else { // 第二次到达
if mostRight.Left == nil {
minHeight = getMin(minHeight, curLevel)
}
curLevel -= rightBoardSize
mostRight.Right = nil
}
} else { // 只有一次到达
curLevel++
}
cur = cur.Right
}
finalRight := 1
cur = head
for cur.Right != nil {
finalRight++
cur = cur.Right
}
if cur.Left == nil && cur.Right == nil {
minHeight = getMin(minHeight, finalRight)
}
return minHeight
}
func getMin(a int, b int) int {
if a < b {
return a
} else {
return b
}
}
执行结果如下:

2021-03-21:给定一棵二叉树的头节点head,求以head为头的树中,最小深度是多少?的更多相关文章
- hdu6035 Colorful Tree 树形dp 给定一棵树,每个节点有一个颜色值。定义每条路径的值为经过的节点的不同颜色数。求所有路径的值和。
/** 题目:hdu6035 Colorful Tree 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6035 题意:给定一棵树,每个节点有一个颜色值.定 ...
- 【剑指offer】输入一颗二叉树的根节点,求二叉树的深度,C++实现
原创博文,转载请注明出处! # 题目 # 举例 下图二叉树的深度为4,最长路径为1-2-5-7. # 思路(递归) 如果一个树只有一个节点,它的深度为1: 如果根节点只有左子 ...
- leetcode 235 236 二叉树两个节点的最近公共祖先
描述: 给定二叉树两个节点,求其最近公共祖先.最近即所有公共祖先中深度最深的. ps:自身也算自身的祖先. 235题解决: 这是二叉搜索树,有序的,左边小右边大. TreeNode* lowestCo ...
- 【js】Leetcode每日一题-二叉树的堂兄弟节点
[js]Leetcode每日一题-二叉树的堂兄弟节点 [题目描述] 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处. 如果二叉树的两个节点深度相同,但 父节点不 ...
- (Java基础--Spring阶段)常见面试题题目及解析整理(2021.03.12)
题目整理 Java基础进阶阶段 基础概念类 1.JDK1.8新特性? 2.面向对象和面向过程的区别? 3.什么是值传递和引用传递? 4.什么是不可变对象? 5.讲讲类的实例化顺序? 6.java 创建 ...
- http://www.cnblogs.com/wzh206/archive/2010/03/21/1691112.html
http://www.cnblogs.com/wzh206/archive/2010/03/21/1691112.html
- Invert a binary tree 翻转一棵二叉树
Invert a binary tree 翻转一棵二叉树 假设有如下一棵二叉树: 4 / \ 2 7 / \ / \ 1 3 6 9翻转后: 4 / \ 7 ...
- C++ 推断一棵二叉树是否对称
一棵二叉树对称,就是说它假设以根为轴,翻转过去一样.例如以下图所看到的,以虚线为轴.把左边翻转到右边,各顶点及顶点中的值一一相应. watermark/2/text/aHR0cDovL2Jsb2cuY ...
- 笔试算法题(36):寻找一棵二叉树中最远节点的距离 & 根据二叉树的前序和后序遍历重建二叉树
出题:求二叉树中距离最远的两个节点之间的距离,此处的距离定义为节点之间相隔的边数: 分析: 最远距离maxDis可能并不经过树的root节点,而树中的每一个节点都可能成为最远距离经过的子树的根节点:所 ...
- 剑指offer38:输入一棵二叉树,求该树的深度
1 题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 2 思路和方法 深度优先搜索,每次得到左右子树当前最大路径,选择 ...
随机推荐
- K8S 性能优化 - OS sysctl 调优
前言 K8S 性能优化系列文章,本文为第一篇:OS sysctl 性能优化参数最佳实践. 参数一览 sysctl 调优参数一览 # Kubernetes Settings vm.max_map_cou ...
- CSPS2019 括号树 题解
链的部分分 我们设f[i]表示以i结尾的括号序列有多少个,那么i的实际答案就是f的前缀和 显然,所有左括号和不能匹配的右括号的f均为0 对于每一个能匹配的右括号i,我们找到与之匹配的左括号p,以i结尾 ...
- fullcalendar 日历插件的使用
[需求]:使用 fullcalendar日历插件,完成如下功能:可以进行拖动,点击空白处添加,双击后修改和删除等功能.API 链接
- openwrt 刷回梅林或者原厂固件
路由器刷了openwrt固件后,访问不了CFE恢复模式了.本人最近用腾达AC18路由器,刷了AC68U的梅林改版固件.但是后面再用CFE刷了openwrt固件之后,发现wifi不能用,所以又想刷回梅林 ...
- 聊聊Spring扩展点BeanPostProcessor和BeanFactoryPostProcessor
介绍 今天聊一聊spring中很重要的两个扩展点BeanPostProcessor和BeanFactoryPostProcessor,spring之所以如次强大,是因为它提供了丰富的功能给我们使用,但 ...
- MySQL日志机制分析
进入正题前先简单看看MySQL的逻辑架构,相信我用的着. MySQL的逻辑架构大致可以分为三层: 第一层:处理客户端连接.授权认证,安全校验等. 第二层:服务器server层,负责对SQL解释.分析. ...
- 免费,小巧好用的pdf阅读器以及护眼模式颜色代码
免费,迷你,小巧pdf阅读器 https://www.sumatrapdfreader.org/downloadafter 网络上流行的眼神RGB值和颜色代码 绿色豆沙可以有效减轻长时间使用电脑的眼睛 ...
- [Linux/Bash/Shell]curl & wget
1 参考文献 curl 的用法指南 - 阮一峰 curl网站开发指南 - 阮一峰 Curl Cookbook https://curl.haxx.se/ linux curl 命令详解,以及实例 2 ...
- sorted、返回函数、匿名函数、装饰器、偏函数
1.sorted()排序方法,它可已经一个列表按照升序排序,也可以按照反序排序 1)如果要进行反序排序时,需要在函数里面设置reverse = True 2)sorted是一个高阶函数,它接受函数作为 ...
- Luogu P2574 XOR的艺术 P3870 [TJOI2009]开关 P2846 [USACO08NOV]光开关Light Switching SP7259 LITE - Light Switching
四倍经验题 简单线段树qwq(那你怎么还调了好几个小时) 修改:\(ans[cur]=(r-l+1-ans[cur]);\) 点表示的区间有多长就是有多少盏灯 亮着的关掉 暗的开启 就是上述语句了. ...