java数据结构与算法之判断是否是满二叉树
Posted wen-pan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java数据结构与算法之判断是否是满二叉树相关的知识,希望对你有一定的参考价值。
1、满二叉树的定义
除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树。
国内教程定义:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。
参考:百度百科.满二叉树的定义
2、根据满二叉树的定义,求解方法如下:
其实明白了满二叉树的定义后,这个题就很好解了,无非就是求得整棵树的高度和节点个数,看看高度和节点个数是否满足
N = 2^L - 1
公式即可。
- 求出节点个数 N 和树的最大深度 L
- 通过公式:N = 2^L - 1 计算即可,如果等式成立,则说明是一棵满二叉树,否则就不是满二叉树。
- 可以使用二叉树题目的套路来求解该题目(即递归向左右孩子要信息)!!!
代码如下:
public static class ReturnData {
// 节点的个数
public int count;
// 树的高度
public int heigh;
public ReturnData(final int count, final int heigh) {
this.count = count;
this.heigh = heigh;
}
}
public static ReturnData isFullTreeProcess(final TreeNode head) {
// base case
if (head == null) {
// 当节点为空的时候,递归向上返回,此时该节点代表的子树的节点个数为0,树高位0
return new ReturnData(0, 0);
}
// 1、向左孩子要数据
final ReturnData leftResult = isFullTreeProcess(head.left);
// 2、向右孩子要数据
final ReturnData rightResult = isFullTreeProcess(head.right);
// 3、组装当前节点的数据,最后返回给递归调用的上层
// 由当前节点组成的子树的节点个数 = 左孩子的节点个数 + 有孩子的节点个数 + 1
final int currentCount = (leftResult.count + rightResult.count) + 1;
// 由当前节点组成的子树的高度 = 左右孩子中树高最高的那个 + 1
final int currentHeigh = leftResult.heigh > rightResult.heigh ? leftResult.heigh + 1 : rightResult.heigh + 1;
return new ReturnData(currentCount, currentHeigh);
}
以上是关于java数据结构与算法之判断是否是满二叉树的主要内容,如果未能解决你的问题,请参考以下文章