文章目录

  • 思路
  • Java 实现

思路

求结点个数为什么能用递归?

二叉树求结点个数,从根结点开始,求二叉树结点个数,对于根结点就是求左右子树所有结点数之和再加一,对于左右子树又是如此计算,这样的形式满足递归的思想,大问题化小问题,小问题有一个最终的出口,出口就是最下面那个结点左右子树为空,这样空节点的结点个数为 0

如何用栈来思考二叉树结点个数?

就是二叉树的遍历,先序中序后序,层次遍历皆可以,栈中的数据是从没有到不断存入,到最后栈为空,所以我们可以在 push 后让结点 count 加一,或者在 pop 时候让结点 count 加一都可以,下面例子我才用中序遍历的非递归算法,然后 push 时加一来处理

Java 实现

// 结点
class Node {int data;Node left = null;Node right = null;
}// 二叉树
public class BinaryTree {// 根结点private Node root;// 输入的数组private int[] arr_in;// 输出的数组private int[] arr_out;// 记录数组下标private static int index;// 初始化public BinaryTree(int[] arr) {root = new Node();this.arr_in = arr;arr_out = new int[arr.length];index = 0;}// 得到二叉树结点的个数(递归)public int getNodesNumber(Node r) {if (r)return getNodesNumber(r.left) + getNodesNumber(r.right) + 1;elsereturn 0;}// 得到二叉树结点的个数(非递归)public int getNodesNumber(Node r) {Stack stack = new Stack();Node node = r;int count = 0;if (node) {stack.push(node);count++;node = node.left}else {Node top = stack.pop();node = top.right;}return count;}

数据结构-二叉树(统计二叉树的结点个数递归与非递归算法)相关推荐

  1. 数据结构二叉树中序遍历递归和非递归算法

    2022.11.19 二叉树中序遍历递归和非递归算法 任务描述 相关知识 编程要求 测试说明 C/C++代码 任务描述 本关任务:给定一棵二叉树,使用递归和非递归的方法实现二叉树的中序遍历结果. 相关 ...

  2. 全排列之递归与非递归算法实现总结

    全排列之递归与非递归算法实现总结 递归实现 常见的是基于交换的,原理:从而可以推断,设一组数p = {r1, r2, r3, ... ,rn}, 全排列为perm(p),pn = p - {rn}. ...

  3. Java实现折半查找(二分查找)的递归和非递归算法

    Java二分查找实现,欢迎大家提出交流意见. /** *名称:BinarySearch *功能:实现了折半查找(二分查找)的递归和非递归算法. *说明: *     1.要求所查找的数组已有序,并且其 ...

  4. 树与二叉树——二叉树中计算叶子结点个数问题

    1.已知完全二叉树具有967个结点,则其叶子结点个数为: 详解: 首先明确一点该二叉树是一棵二叉树,那可以使用二叉树的一些性质. 从第一层开始计算每层的节点个数:1,2,4,8,16,32,64,12 ...

  5. 二叉树的先中后序递归和非递归遍历(数据结构作业)

    一.设计思想 我创建二叉树是用的先序创建,其中用'#'代表空节点. 1.递归先序遍历 (1)如果当前节点为空节点(用'#'代表空节点),结束当前函数 (2)打印当前节点 (2)递归当前节点的左子树 ( ...

  6. 获取二叉树叶子节点个数的递归及非递归算法

    递归算法 public static<T> int numOfLeavesInRecursion(BinaryTreeNode<T> root){ // 获取二叉树叶子节点的个 ...

  7. 二叉树的前中后序递归和非递归遍历操作【代码】

    "遍历"是二叉树各种操作的基础,可以在遍历过程中对节点进行各种操作,如:求节点的双亲,求节点的孩子,判断节点的层次.当然,还有一些更重要的操作,例如,依据遍历序列建立二叉树,对建立 ...

  8. 二叉树遍历算法详解(递归法+非递归法)

    二叉树遍历算法详解 在上一篇C语言实现二叉树中有提到对于二叉树的遍历,包括前序,中序和后续遍历,以及层次遍历 大家已经熟悉了二叉树的前中后序遍历过程,大部分都采用了递归的思想来实现 在leetcode ...

  9. 二叉树的四种遍历方式(递归和非递归双重实现)

    写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...

最新文章

  1. CV_IMAGE_ELEM参数赋值时注意的问题
  2. box unboxing(装箱 拆箱) C#编程指南
  3. 购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(3)--Idetity,OWIN前后端验证
  4. python操作系统接口错误_Python os模块和sys模块 操作系统的各种接口
  5. django模型——数据库(二)
  6. ICCV 2019 | ActivityNet 挑战赛冠军方案—时序动作提名,边界匹配网络详解
  7. java中Long的比较
  8. mysql的sql性能分析器
  9. JavaScript动态显示当前时间和倒计时的设计(附全码)_AX
  10. 量化指标公式源码_通达信博尔量化指标 看了就明白 源码
  11. 计算机辅助公差技术主要研究内容,计算机辅助形位公差类型生成技术的分析研究.pdf...
  12. java web 甘特图_基于Web开发的甘特图控件,支持Java、.Net
  13. redis keys命令,生产环境慎用,最好屏蔽掉
  14. 实践 ArcGIS Web 3D
  15. python画机器猫
  16. 秦安三中2021高考一成绩查询,喜报!天水一中、三中、五中2019年高考成绩来了!...
  17. C的编译链接及Makefile学习
  18. 拼多多怎么发布机会产品|百择电商
  19. 消息中间件:选型分析。
  20. 社会工程学与APT攻击之——社工防御方法

热门文章

  1. 工业检测深度学习方法综述
  2. 学生使用的台灯该怎么选择?2023适合学生房间的灯推荐
  3. 【AI简报20210827期】AI芯片逐步落地智能教育硬件市场!用AI设计芯片会成为未来趋势吗?...
  4. 无锡蓝海华腾技术有限公司企业调研
  5. 腾讯副总裁王巨宏:微信校园卡可以解决课堂点名的问题
  6. i7-10750H性能怎么样?相当于台式机什么水平?
  7. 中文输入法下全角半角和中文标点英文标点
  8. churn rate 流失率
  9. matlab 状态观测器 ppt,实验六利用MATLAB设计状态观测器
  10. 60 分钟入门 PyTorch !这里有一份新手指南