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
}
}

执行结果如下:


左神java代码

评论

2021-03-21:给定一棵二叉树的头节点head,求以head为头的树中,最小深度是多少?的更多相关文章

  1. hdu6035 Colorful Tree 树形dp 给定一棵树,每个节点有一个颜色值。定义每条路径的值为经过的节点的不同颜色数。求所有路径的值和。

    /** 题目:hdu6035 Colorful Tree 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6035 题意:给定一棵树,每个节点有一个颜色值.定 ...

  2. 【剑指offer】输入一颗二叉树的根节点,求二叉树的深度,C++实现

    原创博文,转载请注明出处! # 题目 # 举例        下图二叉树的深度为4,最长路径为1-2-5-7. # 思路(递归)       如果一个树只有一个节点,它的深度为1: 如果根节点只有左子 ...

  3. leetcode 235 236 二叉树两个节点的最近公共祖先

    描述: 给定二叉树两个节点,求其最近公共祖先.最近即所有公共祖先中深度最深的. ps:自身也算自身的祖先. 235题解决: 这是二叉搜索树,有序的,左边小右边大. TreeNode* lowestCo ...

  4. 【js】Leetcode每日一题-二叉树的堂兄弟节点

    [js]Leetcode每日一题-二叉树的堂兄弟节点 [题目描述] 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处. 如果二叉树的两个节点深度相同,但 父节点不 ...

  5. (Java基础--Spring阶段)常见面试题题目及解析整理(2021.03.12)

    题目整理 Java基础进阶阶段 基础概念类 1.JDK1.8新特性? 2.面向对象和面向过程的区别? 3.什么是值传递和引用传递? 4.什么是不可变对象? 5.讲讲类的实例化顺序? 6.java 创建 ...

  6. http://www.cnblogs.com/wzh206/archive/2010/03/21/1691112.html

    http://www.cnblogs.com/wzh206/archive/2010/03/21/1691112.html

  7. Invert a binary tree 翻转一棵二叉树

    Invert a binary tree 翻转一棵二叉树 假设有如下一棵二叉树: 4  / \   2    7  / \   / \ 1  3 6  9翻转后: 4     /    \    7 ...

  8. C++ 推断一棵二叉树是否对称

    一棵二叉树对称,就是说它假设以根为轴,翻转过去一样.例如以下图所看到的,以虚线为轴.把左边翻转到右边,各顶点及顶点中的值一一相应. watermark/2/text/aHR0cDovL2Jsb2cuY ...

  9. 笔试算法题(36):寻找一棵二叉树中最远节点的距离 & 根据二叉树的前序和后序遍历重建二叉树

    出题:求二叉树中距离最远的两个节点之间的距离,此处的距离定义为节点之间相隔的边数: 分析: 最远距离maxDis可能并不经过树的root节点,而树中的每一个节点都可能成为最远距离经过的子树的根节点:所 ...

  10. 剑指offer38:输入一棵二叉树,求该树的深度

    1 题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 2 思路和方法 深度优先搜索,每次得到左右子树当前最大路径,选择 ...

随机推荐

  1. 如何让Macbook Touch Bar 一直显示F1~F12

    原始状态 修改过程 系统偏好设置 > 键盘 将Touch Bar Shous 修改为F1, F2 ,etc. 结果

  2. boost编译指定python版本号

    1.执行如下 bootstrap 语句,会在目录下生成 project-config.jam 文件 .\bootstrap --with-python="C:\Users\yzy\Anaco ...

  3. 深入理解 Python 虚拟机:元组(tuple)的实现原理及源码剖析

    深入理解 Python 虚拟机:元组(tuple)的实现原理及源码剖析 在本篇文章当中主要给大家介绍 cpython 虚拟机当中针对列表的实现,在 Python 中,tuple 是一种非常常用的数据类 ...

  4. Centos7 禁用IPV6地址的方法

    方法 1 编辑文件/etc/sysctl.conf, vi /etc/sysctl.conf 添加下面的行: net.ipv6.conf.all.disable_ipv6 =1 net.ipv6.co ...

  5. Goravel ORM 新增模型关联,用 Golang 写关联也可以跟 Laravel 一样简单

    关于 Goravel Goravel 是一个功能完备.具有良好扩展能力的 Web 应用程序框架.作为一个起始脚手架帮助 Golang 开发者快速构建自己的应用.框架风格与 Laravel 保持一致,让 ...

  6. jquery二级菜单。显示了jquery的方便

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. [原创][luogu]P1217 回文质数 真·生成回文的方法

    不多说,直接看代码,都在注释里 // 中心思想: // * 1. 代入数据只想回文的一半和位数的变化 // * 例. 1001 和 101 都存的是10, 但是位数一个是4, 一个是3 // * 2. ...

  8. 图与网络分析—R实现(一)

    图与网络 一个网络G,也可以称为图(graph)或网络图,是一种包含了节点V(即网络参与者,也称顶点)与边E(即节点之间的连接关系)的数学结构,记作G={V,E}.可以使用一个矩阵来存放节点之间的连接 ...

  9. python入门教程之十五获取对象属性的几种方法

    当我们拿到一个对象的引用时,如何知道这个对象是什么类型.有哪些方法呢? 使用type() 首先,我们来判断对象类型,使用type()函数: 基本类型都可以用type()判断: >>> ...

  10. Spring很常用的@Conditional注解的使用场景和源码解析

    你好,我是刘牌! 介绍 今天要分享的是Spring的注解@Conditional,@Conditional是一个条件注解,它的作用是判断Bean是否满足条件,如果满足条件,则将Bean注册进IOC中, ...