1 package my_basic.class_4;
2
3 public class Code_06_IsBalanceTree {
4 //判断一颗树是否是平衡二叉树
5 public static class Node{
6 int value;
7 Node left;
8 Node right;
9 public Node(int value) {
10 this.value = value;
11 }
12 }
13
14 public static class ReturnData{
15 boolean isB;
16 int h;
17 public ReturnData(boolean isB, int h) {
18 this.isB = isB;
19 this.h = h;
20 }
21 }
22 public static boolean isBlanceTree(Node head) {
23 return process(head).isB;
24 }
25
26 public static ReturnData process(Node head) {
27 if (head == null) {
28 return new ReturnData(true, 0);
29 }
30 ReturnData leftdata = process(head.left);
31 if (!leftdata.isB) {
32 return new ReturnData(false, 0);
33 }
34 ReturnData rightdata = process(head.right);
35 if (!rightdata.isB) {
36 return new ReturnData(false, 0);
37 }
38 if (Math.abs(leftdata.h - rightdata.h) > 1) {
39 return new ReturnData(false, 0);
40 }
41 return new ReturnData(true, Math.max(leftdata.h, rightdata.h) + 1);
42
43 }
44
45 //for test
46 public static void main(String[] args) {
47 Node head = new Node(1);
48 head.left = new Node(2);
49 head.right = new Node(3);
50 head.left.left = new Node(4);
51 head.left.right = new Node(5);
52 head.right.left = new Node(6);
53 // head.right.right = new Node(7);
54 head.right.left.left = new Node(7);
55
56 System.out.println(isBlanceTree(head));
57 }
58 }