想到了就很简单:
按照层序队列对其进行编号,左孩子是2倍,右孩子是2倍+1,所以需要维护一个hashmap,<Node,Integer>类型,存放结点和编号,每次新节点加入则为其分配一个序号,将其直接插入到相应位置下即可。
class CBTInserter {
TreeNode root;
Map<Integer, TreeNode> map;
public CBTInserter(TreeNode root) {
this.root = root;
map = new HashMap<>();
buildTree(root, 1);
}
private void buildTree(TreeNode root, int num) {
if (root == null) return;
map.put(num, root);
buildTree(root.left, num * 2);
buildTree(root.right, num * 2 + 1);
}
public int insert(int val) {
int num = map.size() + 1;
TreeNode node = new TreeNode(val);
map.put(num, node);
if (num % 2 == 0)
map.get(num / 2).left = node;
else
map.get(num / 2).right = node;
return map.get(num / 2).val;
}
public TreeNode get_root() {
return root;
}
}