《剑指offer》——平衡二叉树

60 篇文章 3 订阅

更多2019年的技术文章,欢迎关注我的微信公众号:码不停蹄的小鼠松(微信号:busy_squirrel),也可扫下方二维码关注获取最新文章哦~

T:

题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。

该题目我想了好久,总是想在一个递归函数内解决这个问题,最后没能找出解决方案。

本题的关键在于两个部分的求解:

  1. 要计算每个节点的深度(或者计算该节点两个孩子节点的深度);
  2. 根据两个子节点的深度差判断该以该节点为子树的结构是否为平衡二叉树。

第一个问题的求解,就需要递归解决,第二个问题,也要递归解决。

比如:

节点a的两个子节点的深度差小于等于1,还要继续看两个子节点是否各自满足这个条件,即对每个子节点来说,其两个子节点是否也满足深度差小于等于1,如此递归下去,直到叶节点。

两个问题,就需要两个递归函数,各自执行各自的功能,而问题2的求解依赖于问题1的答案。

code:

	/**
	 * T: 平衡二叉树
	 * 
	 * 题目描述 
	 * 输入一棵二叉树,判断该二叉树是否是平衡二叉树。
	 * 
	 * date: 2015.11.21  17:14
	 * @author SSS
	 *
	 */
	public class Solution {
	    
	    /**
		 * 该函数的功能:
		 * 判断当前节点的左右节点其高度差是否大于1.
		 * 当大于1的时候返回false;
		 * 当不大于1的时候,要看其两个子节点是否也满足该条件。
		 * @param root
		 * @return
		 */
	    public boolean IsBalanced_Solution(TreeNode root) {
	        if (root == null) {
				return true;
			}
	        
	        int leftDepth = this.getDepth(root.left);
	        int rightDepth = this.getDepth(root.right);
	        
	        if (Math.abs(leftDepth - rightDepth) > 1) {
				return false;
			}
	        
	        return IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right);
	    }
	    
	    /**
		 * 该函数的功能:当前节点为根节点的子树的深度
		 * @param rootTreeNode
		 * @return
		 */
		public int getDepth(TreeNode rootTreeNode) {
			if (rootTreeNode == null) {
				return 0;
			}
			
			int leftDepth = getDepth(rootTreeNode.left);
			int rightDepth = getDepth(rootTreeNode.right);
			
			int depth = Math.max(leftDepth, rightDepth);
			return depth + 1;
		}
	}

更多2019年的技术文章,欢迎关注我的微信公众号:码不停蹄的小鼠松(微信号:busy_squirrel),也可扫下方二维码关注获取最新文章哦~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值