原文鏈接
java判斷一顆二叉樹是否爲平衡二叉樹
import java.util.*;
class TreeNode {
int val;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public class Test {
/**
* 1
* 2 3
* 4 # 5 6
* 7 8 # # # #
* 9
*/
private char[] treeValue = {'1', '2', '3', '4', '#', '5', '6', '7', '8', '#', '#', '#', '#', '9'};
private int height(TreeNode node) {
if(node == null) {
return 0;
} else {
return Math.max(height(node.left), height(node.right)) + 1;
}
}
public boolean isBalanceTree(TreeNode node) {
if(node == null) {
return true;
}
return Math.abs(height(node.left) - height(node.right)) <= 1;
}
public TreeNode buildTree() {
LinkedList<TreeNode> queue = new LinkedList<>();
TreeNode head = new TreeNode(treeValue[0] - '0');
queue.offer(head);
for(int i = 1; i < treeValue.length; i = i + 2) {
TreeNode node = queue.poll();
if(node == null) {
continue;
}
if(treeValue[i] != '#') {
node.left = new TreeNode(treeValue[i] - '0');
queue.offer(node.left);
}
if(i + 1 < treeValue.length && treeValue[i + 1] != '#') {
node.right = new TreeNode(treeValue[i + 1] - '0');
queue.offer(node.right);
}
}
return head;
}
public static void main(String[] args) {
Test test = new Test();
TreeNode head = test.buildTree();
System.out.println(test.isBalanceTree(head));
}
}