剑指offer_39:判断平衡二叉树

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012429555/article/details/89480917

关于这一道题我没想到还蛮难的

思路就是双递归去完成

第一个解决高度差,左右子树的高度差如何求解?对这就是求一个树的深度,一个树的深度怎么求?

遍历呀,怎么遍历,随便一个遍历算法就行啊,用递归求啊!

public int IsBalanced_Solution_1(TreeNode root) {
	      if(root==null) {
	    	  return 0;
	      }  
	      int left=IsBalanced_Solution_1(root.left);
	      int right=IsBalanced_Solution_1(root.right);
	      return Math.max(left, right)+1;
	      
	}

一个树是由很多小树构成,求得一个树的深度,

之后,那我们求左右子树的深度,然后递归求相差值。怎么求每个子树的相差值?递归求呀!

如果相差的绝对值大于1,那就直接返回false;如果一直是true,则最后左右子树,返回true喽

	public boolean IsBalanced_Solution(TreeNode root) {  
	     if (root==null) {
			return true;
		}
	     int left_num=IsBalanced_Solution_1(root.left);
	     int right_num=IsBalanced_Solution_1(root.right);
	     if (Math.abs(left_num-right_num)>1) {
			return false;
		}
	     boolean left=IsBalanced_Solution(root.left);
	     boolean  right=IsBalanced_Solution(root.right);
	     return left&&right;
  }

整个程序如下:

package Chap2;
class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
public class IsBalanced_Solution {
	public boolean IsBalanced_Solution(TreeNode root) {  
	     if (root==null) {
			return true;
		}
	     int left_num=IsBalanced_Solution_1(root.left);
	     int right_num=IsBalanced_Solution_1(root.right);
	     if (Math.abs(left_num-right_num)>1) {
			return false;
		}
	     boolean left=IsBalanced_Solution(root.left);
	     boolean  right=IsBalanced_Solution(root.right);
	     return left&&right;
  }
	
	
	public int IsBalanced_Solution_1(TreeNode root) {
	      if(root==null) {
	    	  return 0;
	      }  
	      int left=IsBalanced_Solution_1(root.left);
	      int right=IsBalanced_Solution_1(root.right);
	      return Math.max(left, right)+1;
	      
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}

猜你喜欢

转载自blog.csdn.net/u012429555/article/details/89480917