热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【剑指offer】11.二叉树的深度

总目录:算法之旅导航目录 1.问题描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度,根节点的深度视

总目录:

算法之旅导航目录

 

1.问题描述

输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度,根节点的深度视为 1 。

数据范围:节点的数量满足 0≤n≤100,节点上的值满足 0≤val≤100

进阶:空间复杂度 O(1) ,时间复杂度 O(n)

假如输入的用例为{1,2,3,4,5,#,6,#,#,7},那么如下图:

 

2.问题分析

这道题的意义其实比较深远,可以引出深度搜索DFS(Deep first search)和广度搜索BFS(Broad first search)两个概念。

1用递归,最方便

2用辅助队列,逐层遍历,将当前层的节点入队,然后迭代队列长度,边迭代边出队,同时将出队节点的子节点入队。每走一层计数器+1,直至队列中无节点

3.代码实例

递归

1 /*
2 struct TreeNode {
3 int val;
4 struct TreeNode *left;
5 struct TreeNode *right;
6 TreeNode(int x) :
7 val(x), left(NULL), right(NULL) {
8 }
9 };*/
10 class Solution {
11 public:
12 int TreeDepth(TreeNode* pRoot) {
13 //中止条件
14 if (!pRoot) {
15 return 0;
16 }
17
18 //递归调用
19 int leftDep = TreeDepth(pRoot->left);
20 int rightDep = TreeDepth(pRoot->right);
21
22 //本层逻辑
23 return leftDep > rightDep ? (leftDep + 1) : (rightDep + 1);
24 }
25 };

View Code

队列

1 /*
2 struct TreeNode {
3 int val;
4 struct TreeNode *left;
5 struct TreeNode *right;
6 TreeNode(int x) :
7 val(x), left(NULL), right(NULL) {
8 }
9 };*/
10 class Solution {
11 public:
12 int TreeDepth(TreeNode* pRoot) {
13 //空树
14 if (!pRoot) {
15 return 0;
16 }
17
18 //初始化队列
19 queue q;
20 q.push(pRoot);
21
22 //初始化计数器
23 int nodeCount = 0;
24 int depth = 0;
25
26 //逐层迭代
27 while (!q.empty()) {
28 //遍历当前层的所有节点
29 nodeCount = q.size();
30 for (int i = 0; i ) {
31 auto* pNode = q.front();
32 q.pop();
33
34 if(pNode->left) q.push(pNode->left);
35 if(pNode->right) q.push(pNode->right);
36 }
37
38 //本层结束,计数器++
39 depth++;
40 }
41 return depth;
42 }
43 };

View Code

 



推荐阅读
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了高效算法求解数独相关的知识,希望对你有一定的参考价值。title:高效算法求解数独 ... [详细]
  • 《本文同步发布于“脑之说”微信公众号,欢迎搜索关注~~》**摘要:**虽然大多数生物系统的功能受到其结构的严格限制,但目前的证据表明,大脑网络的结构和功能之间的耦合是相对温和的。我 ... [详细]
  • MFC应用程序单文档及类向导的使用
    我想不起来第一次看见你的时候,你穿的衣服是什么颜色,是晴天还是雨天,因为我从未想到,那天之后我会这么喜欢你。。。----网 ... [详细]
  • 删除二分搜索树的节点一、删除二分搜索树的最小值和最大值1.先找到二分搜索树的最小值和最大值最小值:二叉树中的最左侧的元素(不存在左孩子的节点 ... [详细]
  • 前面介绍过一种非顺序数据结构是散列表,本文将详细介绍另一种非顺序数据结构——树,它对于存储需要快速查找的数据非常有用二叉树、满二叉树、完全二叉树、堆、 ... [详细]
  • 我要用Direct3D建立一个虚拟的屋子,然后把我的视角放到屋子里面,并且可以水平旋转,就象是虚拟现实空间那样。其实就跟DOOM类游戏一样。并且能够用PICK函数去选取在指定点 ... [详细]
  • day01letcode9.买卖股票的最佳时机给定一个数组prices,它的第i个元素prices[i]表示一支给定股票第i天的价格。你只能选择某一天买入这只股票 ... [详细]
  • 生活最近还是在学习flask和java,java马上也快看完了,然后就准备开始复习一下数据结构,同时也预习一下算法。都说程序数据结构算法 ... [详细]
  • 了解供应链简单来说,供应链涉及一系列旨在向最终用户提供产品或服务的步骤。企业组织及其供应商之间始终存在一个网络,来生产特定产品并将其交付给最终用户。该网络包括不同的活动、人员、实体 ... [详细]
  • 编程画出千姿百态的树叶作者:安徽省亳州三中教科处王宇邮编:236800 ... [详细]
  • 【树】树、森林和二叉树的关系
    树的存储结构1.双亲表示法这种方法用一组连续的空间来存储树中的结点,在保存每个结点的同时附设一个指示器来指示其双亲结点在表中的位置,其结点的结构如下图所示:双亲表示法的形式说明如下 ... [详细]
  • 2019年社交媒体趋势报告
    来源:新媒体创意营销KantarMedia发布了新报告“2019年社交媒体趋势”。世界上40%的人口使用社交媒体。一些行业报告显示人们平均每天花两小时在这些平台上分享 ... [详细]
  • *题意:往区间[1,10000000]的墙上贴海报,海报数量 ... [详细]
  • 1:Linux进程间通信类型2:管道(pipe)和有名管道(FIFO)。3:信号(signal),见signal函数、sigaction函数及信号集操作函数和信号的发送和捕捉函数( ... [详细]
  • 栈的一些基本操作目录栈的一些基本操作栈的概念(新手必看)初始化栈销毁栈清空栈判空栈栈长度取栈顶元素入栈操作出栈操作输出栈进制转换栈的概念(新手必看)栈(stack)又名堆栈,是一种 ... [详细]
author-avatar
merlion-p
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有