剑指offer:平衡二叉树(java)

题目描述:

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

分析:

满足:左右二叉树的层数之差小于等于1

1)递归

知道了二叉树的深度怎么求,现在要判断是否是平衡二叉树,只要分别求出左右子树的深度,然后判断深度之差在小于2就行。

//1.递归,如果二叉树左树层数与右边层数之差大于1,就不是平衡二叉树
	public boolean IsBalanced_Solution(TreeNode root) {
        if(root == null)
        	return true;
        int left = TreeDepth(root.left);
        int right = TreeDepth(root.right);
        int diff = left - right;
        if(diff > 1 || diff < -1){
        	return false;
        }
        return IsBalanced_Solution(root.left)&&IsBalanced_Solution(root.right);
    }

public int TreeDepth(TreeNode root) {
		if(root==null)
			return 0;
		int 	num1 =  TreeDepth(root.left);
		int 	num2 =  TreeDepth(root.right);
       return 1+ (num1 > num2 ? num1 : num2); 
    }

2)后续遍历

 

    原文作者:平衡二叉树
    原文地址: https://blog.csdn.net/weixin_38108266/article/details/82595515
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞