平衡二叉树的性质:
1.可以是空树
2.如果不是空树,任何一个结点的左子树和右子树都是平衡二叉树,并且高度之差的绝对值不超过1
如何判断一棵树是否是平衡二叉树:
思路:采用 队列
层序遍历二叉树 将节点入队,
不管左右子树 是空或者 不是空 全部入队
出队时 遇到null 时停止出队,
最后判断队列中所剩元素是不是都是null,
如果都为空,则是完全二叉树
代码展示:
结点定义:
public class TreeNode {
char val;
TreeNode left;
TreeNode right;
TreeNode(){
}
TreeNode(char val) {
this.val = val;
}
}
平衡二叉树判断代码:
public class Practice3 {
public static boolean isComplete(TreeNode root){
//构建一个队列 queue
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
//层序遍历,直到遇到null
while(true){
TreeNode front = queue.poll();
if(front == null){
break;
}
queue.add(front.left);
queue.add(front.right);
}
//判断剩余元素是不是都为空
while(!queue.isEmpty()){
TreeNode node = queue.poll();
if(node != null){
return false;
}
}
return true;
}
}
树:
构建树的代码:
public static TreeNode buildTree() {
TreeNode a = new TreeNode('A');
TreeNode b = new TreeNode('B');
TreeNode c = new TreeNode('C');
TreeNode d = new TreeNode('D');
TreeNode e = new TreeNode('E');
TreeNode f = new TreeNode('F');
TreeNode g = new TreeNode('G');
TreeNode h = new TreeNode('H');
a.left = b; a.right = c;
b.left = d; b.right = e;
c.left = f; c.right = g;
d.left = null; d.right = null;
e.left = null; e.right = h;
f.left = null; f.right = null;
g.left = null; g.right = null;
h.left = null; h.right = null;
return a;
}
运行结果: