今天继续二叉树的递归套路。
一、判断是否是满二叉树
满二叉树定义:对于高度为h的二叉树,节点数为(2^h - 1)
1、递归套路思路
根据满二叉树的定义可以知道,我们每次只需要获取高度、节点数即可。
也就是每次从左子树和右子树中我们都需要 高度、节点数 两个数据,最后再根据高度和节点数的关系判断是否是满二叉树。所以可以定义如下的Info类
/**
* @author Java和算法学习:周一
*/
public static class Info {
public int height;
public int nodes;
public Info(int height, int nodes) {
this.height = height;
this.nodes = nodes;
}
}
2、递归套路代码
(1)首先判断为空时好不好设置,此时是好设置的,节点为空时new Info(0, 0),即认为空节点高度为0、节点数为0。
(2)然后根据列出的所有可能性,编写递归套路的代码,因为要整个形成递归,所以每一步都要返回Info类。(无脑拿到左右子树的Info、拼凑自己的Info、返回自己的Info)
/**
* @author Java和算法学习:周一
*/
public static Info process(Node x) {
if (x == null) {
return new Info(0, 0);
}
// 获取左右子树的信息
Info leftInfo = process(x.left);
Info rightInfo = process(x.right);
// 拼凑自己的信息
int height = Math.max(leftInfo.height, rightInfo.height) +