第一题
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List <List<Integer>> result=new ArrayList<>();
if(root==null) return result;
Queue<TreeNode> queue=new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()){
int len=queue.size();
List<Integer> list=new ArrayList<>();
while(len>0){
TreeNode res=queue.poll();
list.add(res.val);
if(res.left!=null){
queue.add(res.left);
}
if(res.right!=null){
queue.add(res.right);
}
len--;
}
result.add(list);
}
return result;
}
}
思路:1、判断二叉树是否为空,不为空,头节点入对列。 2、判段队列是否为空,不为空,队列中的元素全部出队,元素出队时:(1)判断出队元素的左节点是否为空,不为空入队;(2)判断出队元素的右节点是否为空,不为空入队; 3、第一层遍历完,接下来到第二层,重复以上操作。4、第二层遍历完,接下来到第三层,重复以上操作。5、队列为空,结束遍历。
第二题
第三题
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//在此输入您的代码...
int fensum=0;
int n=(int)Math.pow(2,19);
for(int i=1;i<=n;i*=2){
int fen=n/i;
fensum+=fen;
}
System.out.println(fensum+"/"+n);
scan.close();
}
}
思路:将分母都扩大为最大的那个分母,然后分子乘以分母扩大的倍数,将分子相加再比上分母。