二叉树的操作补充-层序及其变形
import java.util.LinkedList;
import java.util.Queue;
class TreeNode5{
char value;
TreeNode5 left;
TreeNode5 right;
public TreeNode5(char value){
this.value=value;
}
}
public class BinaryTree1 {
public TreeNode5 buildTree() {
TreeNode5 root = new TreeNode5('A');
TreeNode5 B = new TreeNode5('B');
TreeNode5 C = new TreeNode5('C');
TreeNode5 D = new TreeNode5('D');
TreeNode5 E = new TreeNode5('E');
TreeNode5 F = new TreeNode5('F');
TreeNode5 G = new TreeNode5('G');
TreeNode5 H = new TreeNode5('H');
root.left = B;
root.right = C;
B.left = D;
B.right = E;
E.right = H;
C.left = F;
C.right = G;
return root;
}
//1、
//层序遍历
void levelOrderTraversal(TreeNode5 root){
Queue<TreeNode5> queue=new LinkedList<>();
//判断根节点是否为空,若不为空,则放入队列
if(root!=null){
queue.offer(root);
}
//若队列不为空,将队头元素出出去,打印
while (!queue.isEmpty()){
TreeNode5 cur=queue.poll();
System.out.print(cur.value+" ");
//如果当前cur的左不为空,则入队
if(cur.left != null){
queue.offer(cur.left);
}
//如果当前cur的右不为空,则入队
if(cur.right != null){
queue.offer(cur.right);
}
}
}
//2、判断一棵树是不是完全二叉树
boolean isCompleteTree(TreeNode5 root) {
Queue<TreeNode5> queue = new LinkedList<>();
if (root != null) {
queue.offer(root);
}
while (!queue.isEmpty()) {
TreeNode5 cur = queue.poll();
if (cur != null) {
queue.offer(cur.left);
queue.offer(cur.right);
} else {
break;
}
}
//判断:如果队列不为空,队列的头节点不为空,就认为不是完全二叉树,
//如果为空,就出队列,认为此二叉树为完全二叉树。
while (!queue.isEmpty()) {
TreeNode5 cur = queue.peek();
if (cur != null) {
return false;
} else {
queue.poll();
}
}
return true;
}
public static void main(String[] args) {
BinaryTree1 binaryTree1=new BinaryTree1();
TreeNode5 root=binaryTree1.buildTree();
//1、层序遍历 A B C D E F G H
binaryTree1.levelOrderTraversal(root);
//2、判断一棵树是不是完全二叉树
System.out.println(binaryTree1.isCompleteTree(root));
}
}