栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Leetcode--Java--919. 完全二叉树插入器

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Leetcode--Java--919. 完全二叉树插入器

题目描述

样例描述

思路

二叉树的堆式存储 + 完全二叉树性质 + 层序遍历

    用数组来存储完全二叉树,从0开始编号的奇偶数规律。插入一个结点后,如果结点总数是奇数,则一定插在右结点。反之偶数,则一定插在左结点(画图不难发现)
代码
class CBTInserter {
    List list;
    public CBTInserter(TreeNode root) {
        if (root == null) {
            return;
        }
        list = new ArrayList<>();
        Deque q = new linkedList<>();
        //层序遍历来初始化完全二叉树(一行一行放入数组)
        q.offer(root);
        while (!q.isEmpty()) {
            TreeNode node = q.poll();
            list.add(node);
            if (node.left != null) {
                q.offer(node.left);
            }
            if (node.right != null) {
                q.offer(node.right);
            }
        }
    }
    
    public int insert(int val) {
        //直接插入,然后根据结点总数判断插入的是左结点还是右节点
        TreeNode node = new TreeNode(val);
        list.add(node);
        //根据完全二叉树性质求父节点位置,先除2,记得要减一,因为从0开始的
        int parent = list.size() / 2 - 1;
        if (list.size() % 2 == 0) {
            list.get(parent).left = node;
        }else {
            list.get(parent).right = node;
        }
        return list.get(parent).val;
    }
    
    public TreeNode get_root() {
        //数组空的话,就是null,否则返回第一个就是根结点
        return list.isEmpty() ? null : list.get(0);
    }
}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/755682.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号