部队那题就是一个层序遍历的过程,每次生成一个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);
    }
}