LeetCode——919.完全二叉树插入器

通过万岁!!!

  • 题目:就是构建一颗完全二叉树,然后会不断的往完全二叉树中插入元素,要求插入以后,还是完全二叉树。然后插入的时候,返回这个插入的位置的父节点的元素的值。
  • 思路:其实就是按照完全二叉树的顺序进行插入即可。我们可以发现,其实就是层序遍历,我们只要看一下队头的元素左右是不是能放,先放他的左边,然后放他的右边。放完了以后,这个就可以出去了,并且你添加的这个元素,要放入队尾。构造方法,我们就直接构建这个队列,但是需要注意,构造方法的时候,这个队列只能加入,不能进行删除,所以需要一个temp队列来辅助。队列中存放的是叶子节点以及只有左子树的非叶子节点(只有左子树的非叶子的最多只有一个)。但是最开始的时候,我们很难知道谁是要求的节点,所以可以都放进去,然后再第一个insert的时候,就会删除掉。
  • 技巧:层序遍历

java代码

class CBTInserter {
  TreeNode root = new TreeNode();
  Queue<TreeNode> queue = new LinkedList<>();


  public CBTInserter(TreeNode root) {
    this.root = root;
    Queue<TreeNode> temp = new LinkedList<>();
    temp.add(root);
    queue.add(root);
    int size;
    while (!temp.isEmpty()) {
      size = temp.size();
      for (int i = 0; i < size; i++) {
        TreeNode remove = temp.remove();
        if (null != remove.left) {
          temp.add(remove.left);
          queue.add(remove.left);
        }
        if (null != remove.right) {
          temp.add(remove.right);
          queue.add(remove.right);
        }
      }
    }
  }


  public int insert(int val) {
    while (!queue.isEmpty()) {
      TreeNode peek = queue.peek();
      if (null == peek.left) {
        TreeNode treeNode = new TreeNode(val);
        peek.left = treeNode;
        queue.add(treeNode);
        return peek.val;
      }
      if (null == peek.right) {
        TreeNode treeNode = new TreeNode(val);
        peek.right = treeNode;
        queue.add(treeNode);
        queue.remove();
        return peek.val;
      }
      queue.remove();
      continue;
    }
    return val;
  }


  public TreeNode get_root() {
    return root;
  }
}
  • 总结:题目不是特别难,主要是需要熟练掌握层序遍历,也就是广度优先。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值