剑指 Offer 55 - I. 二叉树的深度
输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。

和题解写的一比,我写的像坨shit

//! 求二叉树的高度,递归版本
//! 递归的精髓就在于,把大问题分解为解答过程相同的小问题
//! 既然我们要求根节点的高度,根节点的高度又等于其子节点的最大高度加一
//! 那么问题就转化为了求每个节点及其子节点的高度,而最小问题就是叶节点的子节点为空,高度为0
int BinarySearchTreesZH::height(Node *node)
{int nodeHeight = 0;int leftSonHeight = 0;  //代表左子节点高度int rightSonHeight = 0; //代表右子节点高度if (node == nullptr){ //如果到了空结点,则其高度为0nodeHeight = 0;return nodeHeight;}leftSonHeight = height(node->left);rightSonHeight = height(node->right);if (leftSonHeight >= rightSonHeight) //当前结点的高度等于其左右子节点最大高度+1{nodeHeight = leftSonHeight + 1;}else{nodeHeight = rightSonHeight + 1;}return nodeHeight;
}//! 求二叉树的高度,迭代版本
//! 所谓二叉树的高度就是二叉树有多少层,所以在层序遍历里加一个层数计数就可以了
//! 但这个层数计数反倒是难想,其实在层序遍历的队列中,上一层全部出队后,下一层有多少元素,就是队列的size()
int BinarySearchTreesZH::heightNoRecursion(Node *node)
{queue<Node *> list; //创建结构体指针队列,数据类型Node*,但是层序遍历不用指针也可以if (node == nullptr){return 0;}else{list.push(node); //把根节点push进去}int height = 0;int nextCengNum = 1;     //! 第一层元素数为1int j = 0;               //! 循环计数器,每一层循环nextCengNum次就会清零,并高度+1while (list.size() != 0) //只要队列不为空就一直出队进队{//这里就是把队首的元素的左右子节点进队,然后弹出队首元素,就可以把二叉树中所有节点一层一层的按次序进队和出队//还是画图比较好理解if (list.front()->left != nullptr){list.push(list.front()->left);}if (list.front()->right != nullptr){list.push(list.front()->right);}list.pop();j++; //这里开始就是计算遍历的层数的,遍历次数每到达下一层元素数时就代表一层if (j == nextCengNum){height++;nextCengNum = list.size();j = 0;}}return height;
}

2021-10-09 求二叉树的高度(递归和迭代版本)相关推荐

  1. 49 - 算法 - LeetCode 110 平衡二叉树 - 求二叉树的高度 -双重递归

    // 求二叉树的高度函数 nullptr为0 然后累加 +1 return left-right // 结论都还是递归 当前状态 多加了一个递归求高度 双重递归 class Solution {pub ...

  2. 树:求二叉树的高度和叶子结点数量

    算法代码很简单都是用使用递归计算,大家把递归思想领悟到就ok了. 二叉树高度算法 //求二叉树的高度 采用递归的方式 void GetHeight(BiTree tree, int* heightNu ...

  3. 纬创科技面试 2021.10.09 19:00

    纬创科技面试 面试时间:2021.10.09 19:00 面试方式:两个面试官 腾讯视频面试 面试总结:总体面试比较简单,但是问题较多,也很全面.总体上还是比较满意的 问题 基本情况: 介绍之前的项目 ...

  4. 二叉树遍历_递归和迭代(动图)

    二叉树遍历_递归和迭代 1. 定义二叉树 2. 二叉树递归遍历 3. 二叉树迭代遍历 3.1 前序遍历 3.2 中序遍历 3.3 后序遍历 3.4 层序遍历 1. 定义二叉树   首先定义一个简单的二 ...

  5. LeetCode 104. Maximum Depth of Binary Tree--二叉树高度--递归或迭代--C++,Python解法

    题目地址:Maximum Depth of Binary Tree - LeetCode Given a binary tree, find its maximum depth. The maximu ...

  6. 2021 - 10 -7 ! 二叉树的前序、中序、后序遍历 非递归思路(迭代版本)

    //! 前序遍历的非递归版本,精髓在于用栈模拟递归的过程,但实际进栈出栈顺序与递归并不一样, //! 比较抽象,建议画图理解,比较重要 void BinarySearchTreesZH::preord ...

  7. 2021/10/09码加加模拟赛Day3

    A.题斐波那契 解题思路 水题,打表解决,递归最后一组测试样例会超时.还有大家读题的时候看一下数据范围啊,忽略了不就没分了? #include<iostream> #include< ...

  8. python求二叉树深度(递归)

    def tree_deep(root):if not root:return 0 #说明上一个节点是叶子节点,开始逐步返回left, right = 0, 0if root.left:left = t ...

  9. 二叉树的高度-递归-JS实现

    1 function H(node){2 return node==null?0:(Math.max.call(H(node.left),H(node.right))+1);3 }

最新文章

  1. 使用Cython库包对python的py文件(源码)进行加密,把python的.py文件生成.so文件并调用
  2. gridview的sort_GridView排序:SortDirection始终升序
  3. hessian学习笔记
  4. (转)C#开发微信门户及应用(6)--微信门户菜单的管理操作
  5. java hashMap缓存简单实现
  6. CentOS 7操作系统中设置系统时间/时区的方法
  7. goflyway安装
  8. “5G+工业互联网”重点企业,苏州真趣成功入选
  9. catia中的螺旋伞齿轮画法,基于CATIA的螺旋锥齿轮参数化建模方法研究
  10. 灰度测试或 AB 测试
  11. c语言中循环体表达式,C语言的循环语句
  12. 003_wz_wed_DL_课程一第二周编程题(Logistic回归;神经网络思维;)
  13. JavaScript-高级(学习笔记)
  14. Hibernate(六)一对一映射关系
  15. Aurora---前后端分离博客
  16. LeetCode:Database 115.仓库经理
  17. 情人节送男生的礼物,情人节送礼清单
  18. 微信小程序云开发实现收藏及收藏页面(带样式布局)
  19. 【第68篇】多目标跟踪:文献综述
  20. 基于FFmpeg的运动视频分析

热门文章

  1. 自然语言处理库——TextBlob
  2. android微信支付的实现
  3. 跨链(6)波卡Polkadot “系统框架”
  4. 中国男子足球运动员及男足国家队的评价
  5. 检索图书 FindMess.java
  6. TCP模拟QQ聊天案例
  7. 2-Authentication Framework Chain of Trust
  8. China Linux Kernel-ppt
  9. 2021-12-27
  10. dft变换的两幅图_快速傅里叶变换FFT计算方法 原理及公式