部队那题就是一个层序遍历的过程,每次生成一个TreeNode,判断能不能再分就是判断(value-k)%2=?0,可以再分就new一个left一个right就行;代码如下:
package baidu;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
class TreeNode{
int val;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int k = scanner.nextInt();
int result = 0;
TreeNode root = new TreeNode(n);
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(root);
while(!queue.isEmpty()) {
int cnt = queue.size();
for(int i=0;i<cnt;i++) {
TreeNode cur = queue.poll();
if(cur.val>k&&(cur.val-k)%2==0) {
TreeNode left = new TreeNode((cur.val-k)/2);
TreeNode right = new TreeNode((cur.val+k)/2);
cur.left = left;
cur.right = right;
}else {
result++;
}
if(cur.left!=null) queue.add(cur.left);
if(cur.right!=null) queue.add(cur.right);
}
}
System.out.println(result);
}
}