当前位置: 首页 > 知识库问答 >
问题:

向二叉树中第一个未占用的叶添加元素

孙阳舒
2023-03-14

现在,我正在尝试编写一个二叉堆,Java在二叉树结构上实现,虽然我确实很好地掌握了如何在添加元素后“堆化”树,但在堆底部找到第一个未占用叶子的逻辑让我困惑。

我知道找到第一片未被占用的叶子应该是广度优先遍历,但我仍然不知道广度优先遍历算法到底是如何工作的。

共有1个答案

麹繁
2023-03-14

这就是广度优先搜索第一个空分支(然后插入分支)的结果。请注意,这与深度优先插入基本相同,只是它使用一个队列,深度优先插入使用堆栈。

void breadthFirstInsert(Node root, Object obj) {
    Queue<Node> queue = new LinkedList<>();
    queue.offer(root);
    while(!queue.isEmpty()) {
        Node temp = queue.poll();
        if(temp.left != null) {
            queue.offer(temp.left);
        } else {
            temp.left = new Node(obj);
            return;
        }
        if(temp.right != null) {
            queue.offer(temp.right);
        } else {
            temp.right = new Node(obj);
            return;
        }
    }
}
 类似资料:
  • 上面的函数将包含二叉树每个叶的路径的数组附加到全局数组。 代码工作正常,但我想删除全局变量,并使函数返回数组。我怎么能那样做?

  • 统计二叉树的叶结点个数 根据带虚结点的先序序列建立二叉树,计算其叶子结点的数目后输出。 输入格式: 测试数据有多组,处理到文件尾。每组测试数据在一行中输入一个字符串(不含空格且长度不超过80),表示二叉树的先序遍历序列,其中字符*表示虚结点(对应的子树为空)。 输出格式: 对于每组测试,输出所建立的二叉树的叶子结点数目。输出格式为:“leaf:num”,其中num 为二叉树的叶结点个数。 输入样例

  • 问题查找具有n个节点的完整二叉树中的叶节点数。 我为上述问题编写了一个递归程序,每当我到达一个没有子节点的节点时,遍历树并增加叶节点的数量。但由于这棵树是一棵完整的二叉树,我认为这会使问题变得更容易,但我不知道如何解决。它是否可以简化为紧凑形式(类似于公式)。

  • 我正在用C编写一个简单的二叉树程序,现在它只存储在根节点输入的最新值,例如,如果我在树中输入10,然后在树中输入9,那么9只是覆盖10作为根节点,所以树只存储值9。 我在网上查看了多个C二叉树解决方案,并尝试了它们的实现版本,但仍然没有成功。 这是树中单个节点的结构 到目前为止,我的二叉树课程 插入方法 然后在这样的菜单中调用这个方法 逻辑对我来说似乎都很好,除了我尝试不使用构造函数而只是单独设置

  • 这是一个相当简单的问题,我注意到当我表示一棵树时,无论我用哪种方式(后排序,按顺序,前排序)树叶总是以相同的顺序出现,从左到右。 我只是想知道为什么,这是有原因的吗? 我刚开始研究它们,就想到了这个。 编辑: 我有一棵这样的树: 叶节点为:D、E和F 预购顺序为:A、B、D、C、E、F 顺序是:D,B,A,E,C,F 后序是:D,B,E,F,C,A 叶子节点总是从左到右出现,不管我选择哪个顺序,问

  • 本文向大家介绍二叉树中叶子节点的统计和树高问题,包括了二叉树中叶子节点的统计和树高问题的使用技巧和注意事项,需要的朋友参考一下 1、已知二叉树以二叉链表进行存储,其中结点的数据域为data,编写算法,统计二叉树中叶子结点值等于x的结点数目。 2、已知一棵二叉链表方式存储的二叉树,编写算法计算二叉树的高度。 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值