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数据结构与算法之判断是否是满二叉树的主要内容,如果未能解决你的问题,请参考以下文章

2021-04-14:判断二叉树是否是满二叉树?

如何判断二叉树是满二叉树?

java数据结构与算法之判断是否是完全二叉树

关于树的判定(满二叉树完全二叉树平衡二叉树相似二叉树等价二叉树)

判断二叉树是不是为满二叉树 (C++描述)

完全二叉树与满二叉树的区别是啥?