剑指offer-36.平衡二叉树(273)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_38332722/article/details/100558339

36.平衡二叉树(273)

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

    若一颗二叉树中每一个结点的左、右子树的高度最多相差1,则称此二叉树为平衡二叉树。

  • 思路:

  • 代码:

    package _36.平衡二叉树;
    
    /**
     * 题目描述:输入一棵二叉树,判断该二叉树是否是平衡二叉树。
     * 
     * @author Administrator
     *
     */
    public class BalancedBTree {
    	public boolean IsBalanced_Solution(TreeNode root) {
    		if(root == null) return true;
    		//左子树的高度
    		int left  = depth(root.left);
    		//右子树的高度
    		int right = depth(root.right);
    		//左右子树的高度差
    		int differ = left - right;
    		if(differ > 1 || differ < -1){
    			return false;
    		}
    		return IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right); 
    	}
    	/**
    	 * 求树的高度
    	 * @param root
    	 * @return
    	 */
    	public int depth(TreeNode root){
    		if(root == null) return 0;
    		int left,right;
    		left  = depth(root.left) + 1;
    		right = depth(root.right) + 1;
    		return left > right ? left:right;
    	}
    	
    	
    	public static void main(String[] args) {
    		/**
    		 *          5
    			      /   \
    			     3     7
    			    / \   
    			   2   4 
    			  / \
    			 6   8
    		 */   
    		TreeNode root = new TreeNode(5);
            root.left = new TreeNode(3);
            root.left.left = new TreeNode(2);
            root.left.right = new TreeNode(4);
            root.right = new TreeNode(7);
            root.left.left.left = new TreeNode(6);
            root.left.left.right = new TreeNode(8);
            
            boolean isBalanced_Solution = new BalancedBTree().IsBalanced_Solution(root);
            System.out.println(isBalanced_Solution);
    	}
    }
    
    class TreeNode {
    	int val = 0;
    	TreeNode left = null;
    	TreeNode right = null;
    
    	public TreeNode(int val) {
    		this.val = val;
    	}
    }
    

猜你喜欢

转载自blog.csdn.net/qq_38332722/article/details/100558339