问题:求二叉树的最大深度

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

示例:

1

/

2 3

/ /

4 5 6 7

返回最大深度为3

解题思路

利用深度优先或者广度优先遍历二叉树,找到树的最大深度。

二叉树的结构体

type TreeNode struct {   left *TreeNode // 左子节点   right *TreeNode // 右子节点   value int // 值}

深度优先搜索

主要思路

1.深度优先搜索和二叉树的前序遍历比较类似。

2.利用递归的方式不停下探树的深度。

3.递归的终止条件是如果节点为空就返回0。然后判断左右子树最大值同时加1来表示当前节点的高度。

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}

时间复杂度:O(n)其中n为节点数量。因为每个节点都要访问一次。

空间复杂度:O(logN)其中N是节点数量。在树不是平衡的情况下,空间复杂度是O(N),比如树比较瘸腿一路左子树的情况下。但是如果树比较平衡的情况下空间复杂度是O(logN)。

广度优先搜索

主要思路

1.广度优先搜索利用迭代的方式将每一层的节点都放入到队列当中。

2.队列出队清空进入下一层。

3.利用一个变量来标记深度。每次进入下一次都给这个变量加1来记录深度。

func maxDepth(root *TreeNode) int {   // 根节点如果为0直接返回0   if root == nil {     return 0   }   queue := make([]*TreeNode,0) // 创建一个队列   queue = append(queue,root) // 把根节点放入队列   depth := 0 // 声明深度变量   for len(queue) > 0 {     // 队列里有值就一直循环     size := len(queue) // 这里要把当前一层的队列遍历一遍全部出队     for i:=0;i

时间复杂度:O(n),n代表节点,每一个节点都要遍历一遍。

空间复杂度:O(n),最坏的情况下,队列当中装满了一层的节点。

如有错误,欢迎指正和讨论。

二叉树的深度_Golang面试题:二叉树的最大深度相关推荐

  1. 二叉树的深度_[LeetCode 104] 二叉树的深度

    题目描述 给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. 说明: 叶子节点是指没有子节点的节点. ** 示例:** 给定二叉树 [3,9,20,null,n ...

  2. java 二叉树的深度、平衡二叉树、二叉树的下一个结点

    1. 二叉树的深度 1. 题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 2. 求解思路 可以用后序遍历,从最后一层 ...

  3. 二叉树的深度_十七:二叉树的最小深度

    二叉树的最小深度:从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最短路径的长度为树的最小深度. 算法一 /** * @description 二叉树最小深度 * @param {*} ...

  4. 【剑指offer-Java版】39二叉树的深度

    二叉树的深度:递归 判断二叉树是否是平衡二叉树:注意二叉树平衡代表的是所有非叶子节点都是一棵平衡树 – 而不仅仅是根节点 public class _Q39<T> {public int ...

  5. 给定一棵二叉树,计算该二叉树的深度、总节点个数和叶子节点个数。

    // // binary_tree.cpp // BinaryTreeApp // // Created by ljpc on 2018/5/3. // Copyright © 2018年 ljpc. ...

  6. 树与二叉树——递归算法、非递归算法求二叉树的深度

    二叉树的结构: typedef struct BTNode {ElemType data;struct BTNode *lchild, *rchild; } BTNode; 递归算法求二叉树的深度de ...

  7. 剑指offer——面试题39:二叉树的深度

    剑指offer--面试题39:二叉树的深度 20180906整理 Solution1: 再本题中树的定义:若二叉树只有一个根节点,则此二叉树的深度为1. 迭代法,哈哈哈 /* struct TreeN ...

  8. 面试题55 - I. 二叉树的深度

    2020-03-20 1.题目描述 求二叉树的深度 2.题解 用递归求解即可,注意终止条件,因为对这个题目比较熟悉,就直接在里面写的代码 3.代码 #include <iostream> ...

  9. 算法面试题-----二叉树完整刷题总结

    关于面试中你一定要会的二叉树算法题!! 这个阶段一直在进行刷题,现在总结一下二叉树的常见类型,觉得有用的朋友记得点个赞哈!让我知道自己的总结还是有帮助到一些人的,也为了让更多的人看到.整理不易,转载的 ...

最新文章

  1. Spring Boot + Redis 实现各种操作,写得太好了吧!
  2. 深度学习的相似度计算 向量之间的相似程度计算 Q K V的注意力权重
  3. 调研|我们是否能够实现并应该发展强人工智能?
  4. 数据绑定设计器的使用
  5. 【数字信号处理】傅里叶变换性质 ( 共轭对称序列性质 | 共轭反对称序列性质 | 模偶对称 | 相角奇对称 )
  6. Vue会了吗?来认识一下React吧(上)
  7. VS2015编译Poco+openssl,使用Poco发送HTTPS请求
  8. 【转】伪静态URLRewrite学习笔记
  9. mysql外键排序规则_mysql创建外键出错(注意数据库表字段排序)
  10. 面试工作笔记001---记录各种语言_各种技术经典面试问题
  11. 调查:Blackberry开发者中国大版图
  12. 【CV学习笔记】色彩空间
  13. 数据结构和算法-查找算法之黄金分割查找法
  14. 4200: [Noi2015]小园丁与老司机
  15. IDEA 插件开发 向主菜单注册菜单项目
  16. c语言测试你的性格,著名人格测试:五张图看出你的性格
  17. bmob php支付,GitHub - bmob/bmob-php-sdk: PHP SDK相关源码
  18. BBEdit 14 for mac 大版本更新
  19. 分布式事务简介(seata)
  20. Python数据处理037:结构化数据分析工具Pandas之高级应用

热门文章

  1. 什么是AWS Lambda?
  2. numpy中ravel函数、flatten函数的功能及差异
  3. Jmeter 可视化监控
  4. 机器学习算法之K-近邻算法
  5. laravel php跨域请求,laravel开发中跨域的解决方案
  6. linux mysql远程连接其他服务器_Linux服务器中MySQL远程连接的开启方法
  7. 【英文文本分类实战】之三——数据清洗
  8. 语义分割--Fully Convolutional DenseNets for Semantic Segmentation
  9. k8s免安装-使用kubectl部署Pod, Deployment, LoadBalancer
  10. Qt最新版5.12在Windows环境静态编译安装和部署的完整过程(VS2017)