如何判断一棵树是不是平衡二叉树

平衡二叉树

对于任意一个节点,左子树和右子树的高度差不超过1.满二叉树一定是平衡二叉树.

解题思路:

在树类问题上,递归函数使用起来很方便.它可以让我们从一个节点上经过三次.利用这个特性可以解决大多数的问题.

我们可以先收集左树信息,再收集右数信息然后返回到当前节点判断该节点是否满足要求.

在本题中,我们需要收集的信息是:左树是否平衡,右树是否平衡以及左树和右树的高度.

1-可能性分析: 判断一棵树是否为平衡树也就是判断任意子树是不是平衡术.

假设我们来到了节点X,判断X是否为平衡树需要如下信息

     a-X的左子树是不是平衡树

     b-X的右子树是不是平衡树

     c-如果都平衡,左子树和右子树的高度是多少

扫描二维码关注公众号,回复: 11283297 查看本文章

2-设计递归返回结构

递归返回结构应该包含我们需要的 高度和是否平衡.

	class Res{
		int height;
		boolean isB;
		Res(int height,boolean isB){
			this.height = height;
			this.isB = isB;
		}
	}

3-设计递归过程

public static Res process(Node head){
	//1-基本的边界值判断
	if(head == null){
		return (0,true);
	}
	//3-左节点返回的值
	Res leftRes = process(head.left);
	//4-根据左节点的返回值做出判断
	if(!leftRes.isB){
		return new Res(0,false);
	}
	//5-右节点的返回值
	Res rightRes = process(head.right)
	//6-同样做出判断
	if(!rightRes.isB){
		return new Res(0,false);
	}
	if(Math.abs(leftRes.height - rightRes.height) > 1){
		return new Res(0,false);
	}
	//2-当前节点符合条件,应该返回什么
	return new Res(Math.max(leftRes.height,rightRes.height) + 1, true);
}

猜你喜欢

转载自blog.csdn.net/weixin_39445556/article/details/104940665