二叉树遍历算法的应用(java版)
来源:互联网 发布:苹果app行动监管软件 编辑:程序博客网 时间:2024/05/31 00:39
1.统计二叉树中节点的个数
思路:统计二叉树节点个数,无次序的要求,按照一种次序遍历,遇到节点count++即可。
代码:
/* * 先根序统计节点的个数 */ private int count = 0; public void calculateNodeCount(Btree<T> root){ if (root != null) { count++; calculateNodeCount(root.left); calculateNodeCount(root.right); } } public int getNodeCount(Btree<T> root){ calculateNodeCount(root); return count; }
2.输出二叉树的叶子节点
思路:三种遍历方式输出的二叉树叶子节点的次序是一样的,因此可以选择任意一种,但是输出叶子节点,则遍历过程中,每个节点均测试是否满足叶子节点的条件。
/* * 采用中根序法遍历 */ public void printLeaves(Btree<T> root){ if (root != null) { printLeaves(root.left); if (root.left == null && root.right == null) { visitDate(root); } printLeaves(root.right); } }
3.统计叶子节点的数目
方法1:使用全局变量,参看上述例子,将visitDate(…)变成count++,统计即可。
方法2:通过函数返回值的方法。采用递归的思想,如果是空树,则返回0;如果是叶子,则返回1;否则,返回左右字数的节点之和。必须在左右字数的叶子节点求出来之后,才能求出叶子节点,因此采用后序遍历。
public int getLeavesCount(Btree<T> root){ int nr = 0; int nl = 0; if (root == null) { return 0; } if (root.left == null && root.right == null) { return 1; } nl = getLeavesCount(root.left); nr = getLeavesCount(root.left); return nl + nr; }
4.求二叉树的高度
方法一:使用全局变量的方法。二叉树的根节点为第一层的节点,第h层节点的孩子在h+1层,故增设层次参数h,通过递归调用参数的变化,获得二叉树中每个节点的层次,用全局变量记录二叉树中节点层次的最大值,就是二叉树的高度。
/* * 得到树的高度 */ private int depth = 0; public void getTreeDepth(Btree<T> root, int h){ //h为root节点所在的层次。首次调用时,初始值为1 //depth是记录当前求得的最大层次的全局变量,调用前的初始值为0 if (root != null) { if (h > depth) { depth = h; } getTreeDepth(root.left , h+1); getTreeDepth(root.right, h+1); } }
方法二:通过函数的返回值方法,采用递归的思想,如果是空树,则树的高度为0;否则树的高度为左子树和右子树的最大值加1.此方法中必须在左右字数的高度计算出来后,才可求出树的高度,因此用后序遍历。
public int treeDepth(Btree<T> root){ int hl = 0; int hr = 0; int h = 0; if (root == null) { return 0; }else{ hl = treeDepth(root.left); hr = treeDepth(root.right); h = Math.max(hl, hr) + 1; return h; } }
5.求节点的双亲
思路:在遍历过程中,若当前节点非空且当前节点的左孩子或右孩子就是特定的节点,则已找到双亲,否则在左子树中找到,找到,则返回双亲的指针,未找到,则在右子树中找。
public Btree<T> getParent(Btree<T> root,Btree<T> current){ Btree<T> p = null; if (root == null) { return null; } if (root.right == current || root.left == current) { return root; } p = getParent(root.left,current); if (p != null) { return p; }else{ return getParent(root.right,current); } }
0 0
- 二叉树遍历算法的应用(java版)
- 二叉树遍历算法的应用
- 二叉树遍历算法的应用
- 二叉树遍历算法的应用
- (1.2.5.2)二叉树遍历算法的应用
- java二叉树的遍历算法
- java二叉树的遍历算法
- java二叉树的遍历算法
- java二叉树的遍历算法
- java二叉树的遍历算法
- 二叉树的遍历算法Java实现
- java 二叉树算法(三)树的遍历
- 数据结构--二叉树--求树的深度的算法(树遍历算法的应用)
- 二叉树(一)——二叉树的构造及三种遍历算法的递归实现(java版)
- 二叉树(二)——三种遍历算法的非递归实现(java版)
- 二叉树的遍历(物理算法)
- 二叉树的遍历应用
- 二叉树遍历的应用
- C++上机实验五——项目一 数组分离
- Java内存模型(JMM) 概述
- pom文件
- CSDN 我来了 坚持一个月两篇
- Linux常用命令学习(二)
- 二叉树遍历算法的应用(java版)
- python web下的服务器结构——WSGI容器、Nginx、Flask之间的关系
- CH37X 常见问题梳理与解决流程
- C# using使用简析
- 事务与储存过程
- JS中setTimeOut()和setInterval()定时器用法
- MultiAutoCompleteTextView的应用
- nmap 的使用
- mmap文件映射相关代码