码迷,mamicode.com
首页 > 其他好文 > 详细

N39_判断该二叉树是否是平衡二叉树。

时间:2019-07-12 14:17:54      阅读:47      评论:0      收藏:0      [点我收藏+]

标签:遍历   深度   package   mat   pack   sony   ret   als   ack   

题目描述

输入一棵二叉树,判断该二叉树是否是平衡二叉树。
package new_offer;
/**
 * 输入一棵二叉树,判断该二叉树是否是平衡二叉树。
 * @author Sonya
 *思路:
 *1、借鉴上题 求树的深度。但是效率不高 需要重复遍历结点多次。
 *2、后续遍历,记录每个depth 只需要遍历一次。
 */
public class N39_IsBalanced_Solution {

	public boolean IsBalanced_Solution(TreeNode root) {
        if(root==null) return true;
        int left=TreeDepth(root.left);
        int right=TreeDepth(root.right);
        int val=left-right;
        if(Math.abs(val)>1)return false;
        return IsBalanced_Solution(root.left)&&IsBalanced_Solution(root.right);
    }	
	public int TreeDepth(TreeNode root) {
		if(root==null)return 0;
		int left=TreeDepth(root.left);
		int right=TreeDepth(root.right);
		if(left>right) return left+1;
		else return right+1;
        
    }
	public boolean IsBalanced_Solution2(TreeNode root) {
		int dep = 0;
        return IsBalanced(root, dep);	
		
	}
	public boolean IsBalanced(TreeNode root,int depth) {
		if(root==null) {depth=0;return true;}
		int left,right;
		left=right=0;
		if(IsBalanced(root.left,left)&&IsBalanced(root.right,right)) {
			int val=left-right;
	        if(Math.abs(val)>1)return false;
	        depth=(left>right?left:right)+1;
		}
		return false;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}

  

N39_判断该二叉树是否是平衡二叉树。

标签:遍历   深度   package   mat   pack   sony   ret   als   ack   

原文地址:https://www.cnblogs.com/kexiblog/p/11175684.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!