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

平衡二叉树

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

解题思路:

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

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

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

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

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

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

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

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

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);
}

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值