树的遍历方式总体分为两类:深度优先搜索(DFS)、广度优先搜索(BFS);

  • 常见的 DFS : 先序遍历、中序遍历、后序遍历;
  • 常见的 BFS : 层序遍历(即按层遍历)。

求树的深度需要遍历树的所有节点,本文将介绍基于 后序遍历(DFS) 和 层序遍历(BFS) 的两种解法。

方法一:后序遍历(DFS)
树的后序遍历 / 深度优先搜索往往利用 递归 或 栈 实现,本文使用递归实现。
关键点: 此树的深度和其左(右)子树的深度之间的关系。显然,此树的深度 等于 左子树的深度 与 右子树的深度 中的 最大值 +1+1 。

算法解析:

  • 终止条件: 当 root​ 为空,说明已越过叶节点,因此返回 深度 00 。
  • 递推工作: 本质上是对树做后序遍历。
    计算节点 root​ 的 左子树的深度 ,即调用 maxDepth(root.left);
    计算节点 root​ 的 右子树的深度 ,即调用 maxDepth(root.right);
  • 返回值: 返回 此树的深度 ,即 max(maxDepth(root.left), maxDepth(root.right)) + 1。
'''
输入一棵二叉树,求该树的深度。
从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
'''
# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:def TreeDepth(self, pRoot):# write code hereif pRoot == None:return 0lDepth = self.TreeDepth(pRoot.left)rDepth = self.TreeDepth(pRoot.right)return max(lDepth,rDepth)+1

二叉树的深度(剑指 Offer 55 - I)相关推荐

  1. 【LeetCode】剑指 Offer 55 - I. 二叉树的深度

    [LeetCode]剑指 Offer 55 - I. 二叉树的深度 文章目录 [LeetCode]剑指 Offer 55 - I. 二叉树的深度 一.后序遍历(DFS) 二.层序遍历 一.后序遍历(D ...

  2. 【LeetCode】剑指 Offer 55 - II. 平衡二叉树

    [LeetCode]剑指 Offer 55 - II. 平衡二叉树 文章目录 [LeetCode]剑指 Offer 55 - II. 平衡二叉树 一.后序遍历 + 剪枝(从底至顶) 一.后序遍历 + ...

  3. leetcode 打印_剑指 Offer 32 - III 从上到下打印二叉树 III - leetcode 剑指offer

    题目难度: 中等 原题链接 今天继续更新剑指 offer 系列, 这道题相比昨天那道题多了个每层打印方向不同的需求, 聪明的你想到应该如何实现了吗? 老样子晚上 6 点 45 分准时更新公众号 每日精 ...

  4. JAVA实现重建二叉树(《剑指offer》)

    最近在刷<剑指offer>里的编程题,但是网上关于<剑指offer>的解答多半是C或者C++的,而且官方(作者)也是在用C++进行讲解,这里自己用java写了一些题目的解答代码 ...

  5. 剑指 Offer 55 - 2 平衡二叉树

    输入一棵二叉树的根节点,判断该树是不是平衡二叉树.如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树. 示例 1: 给定二叉树 [3,9,20,null,null,15,7] ...

  6. 剑指 Offer 55 - I. 二叉树的深度

    题目描述 输入一棵二叉树的根节点,求该树的深度.从根节点到叶节点依次经过的节点(含根.叶节点)形成树的一条路径,最长路径的长度为树的深度. 例如: 给定二叉树 [3,9,20,null,null,15 ...

  7. 【LeetCode笔记】剑指 Offer 55 - II. 平衡二叉树(递归、二叉树)

    文章目录 题目描述 思路 && 代码 二刷 一脸懵逼,居然没写这道题的题解.. 题目描述 思路 && 代码 思路:平衡二叉树判断公式 = 左子树满足 + 右子树满足 + ...

  8. LeetCode Algorithm 剑指 Offer 55 - II. 平衡二叉树

    55 - II. 平衡二叉树 Ideas 这题直接扣平衡二叉树的定义就可以了,需要写一个辅助函数用来计算二叉树的高度,然后计算根节点左右子树的高度差,满足深度相差不超过1,那么它就是一棵平衡二叉树. ...

  9. JAVA实现从上往下打印二叉树(《剑指offer》)

    题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. import java.util.ArrayList; import java.util.LinkedList;/** public ...

  10. java 重建二叉树_【剑指offer】 Java实现重建二叉树

    /** * @Author: DaleyZou * @Description: 重建二叉树 * 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树. * 假设输入的前序遍历和中序遍历的结果中都不 ...

最新文章

  1. 多线程断点下载开发总结(二)- 多线程写文件
  2. (Java集合框架)Map集合
  3. 2019数据安装勾选_万能的XY数据标签插件,柱形图也可以呈现变化率
  4. ant design pro取消登录_JeecgBoot实战按需加载 Ant-Design-Vue和Icon
  5. 福利 | 全网疯传免费领,一整套算法课程,拿走不谢!
  6. MySQL常用命令大全
  7. Cisco路由器IOS映像恢复及升级方法
  8. Jetson AGX Xavier配置PyTorch与TorchVision流程
  9. Asp.Net Core 轻松学-玩转配置文件
  10. c++ hsv 红色范围_维生素C的定量测定—2,6二氯酚靛酚法
  11. 代码英雄:波澜壮阔的操作系统之战(音频+长文)
  12. eclipse中variable references non-existion resource可能原因及解决方案
  13. “语音识别”服务人类
  14. jQuery 异步和同步请求
  15. python源码包的安装和卸载
  16. 数据治理成功要素篇1:数据战略管理
  17. Zeloof 自制芯片工艺
  18. 程控增益放大器电路原理图
  19. 如何批量用扫描仪扫描照片_如何用手机扫描旧照片
  20. 一个女程序员的奋斗经历

热门文章

  1. Swift翻译之-关于Swift
  2. Scott Mitchell 的ASP.NET 2.0数据操作教程之九:跨页面的主/从报表
  3. Luogu2602[ZJOI2010] 数字计数
  4. npm下载地址的查询与切换
  5. Ajax学习笔记-get请求参数-4
  6. mongodb用户信息管理案例
  7. rc.local文件开机不执行
  8. android的适配器用于,在Android中实现适用于RecyclerView的适配器
  9. docker 数据卷 mysql_Docker 数据卷
  10. jsp开发项目中的问题解决