leetcode 919 完全二叉树插入器
解题思路:
构造器:声明两个成员变量head(头结点)和队列deque,head指向传进来的树的头结点,然后使用两个双向队列,deque用来存放孩子结点为0或者1的结点,queue用来存放每一层的结点;
**插入:**取出deque的第一个结点node即为最左边第一个插入的点,将要插入的结点插入deque最后,以便以后的插入。然后按照从左到右判断node结点的孩子结点是否为空,为空就插入;
返回头结点:直接返回头结点head。
class CBTInserter {
TreeNode head;
Deque<TreeNode> deque;
public CBTInserter(TreeNode root) {
head = root;
deque = new LinkedList<>();
Queue<TreeNode> queue = new LinkedList();
queue.offer(root);
while(!queue.isEmpty()){
TreeNode node = queue.poll();
if(node.left == null || node.right == null){
deque.offer(node);
}
if(node.left!=null){
queue.offer(node.left);
}
if(node.right!=null){
queue.offer(node.right);
}
}
}
public int insert(int v) {
TreeNode node = deque.peekFirst();
deque.offer(new TreeNode(v));
if(node.left == null){
node.left = deque.peekLast();
}else{
node.right = deque.peekLast();
deque.pollFirst();
}
return node.val;
}
public TreeNode get_root() {
return head;
}
}