class Test1 {
public static void main(String[] args) {
Node node1 = new Node(null,null,1);//根节点
Node node2 = new Node(null,null,1);//1层
Node node3 = new Node(null,null,1);//1层
Node node4 = new Node(null,null,1);//2层
Node node5 = new Node(null,null,1);//2层
// Node node6 = new Node(null,null,1);//2层
Node node7 = new Node(null,null,1);//2层
Node node8 = new Node(null,null,1);//3层
node1.addLeft(node2);
node1.addRight(node3);
node2.addLeft(node4);
node2.addRight(node5);
// node3.addLeft(node6);
node3.addRight(node7);
node4.addLeft(node8);
Node.print(node1);
}
}
//定义树的节点,left为该节点的左孩子,right为该节点的右孩子。value为该节点的内容
class Node{
Node left;
Node right;
Integer value;
public Node(Node left, Node right, Integer value) {
this.left = left;
this.right = right;
this.value = value;
}
public void addLeft(Node left){
this.left = left;
}
public void addRight(Node right){
this.right = right;
}
//广度遍历
public static void print(Node node){
List<Node> queue = new ArrayList<Node>();//队列
List<Integer> val = new ArrayList<>();//存储数值
queue.add(node);//添加根节点的值到队列中
val.add(node.value);
int index = 0;//队列中出队元素的下标
while(true){
if(node.left!=null){
queue.add(node.left);
val.add(node.left.value);
}else{
val.add(0);
}
if(node.right!=null){
queue.add(node.right);
val.add(node.right.value);
}else{
val.add(0);
}
index++;
if(index>=queue.size()){
break;
}
node = queue.get(index);
}
int max = 0;//记录最大值
int temp = 0;//记录层的和
int count = 1;//记录树的层数
int i = 1;
while (i<val.size()){
temp = 0;//每次将层树的和置零
for (;i < 4*count-1; i++) {
if(val.get(i)==1){
temp++;
}
}
if(max<temp){
max = temp;
}
count++;
}
System.out.println(max);
}
}