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

有哪些算法可以增量构建没有顺序约束的平衡二叉树?

方浩旷
2023-03-14

我感兴趣的是获取一个元素列表,并将它们转换成一个平衡的二叉树,每个元素位于树的一片叶子上。此外,我想用一种一次只能看到一个元素的算法来构建树,而不是一次看到整个列表。最后,这个树没有排序约束——也就是说,它不是一个搜索树,所以节点可以按任何顺序排列。

我的问题是:有很多算法可以增量地构建二叉搜索树,但有哪些算法可以在没有任何排序约束的情况下构建平衡的二叉树?它们应该更有效,因为它们不必担心保持节点之间的任何顺序关系。

共有1个答案

祁雪峰
2023-03-14

你可以在线性时间内完成。对于每个2个元素,您需要一个父元素。对于其中的每一个,你都需要另一个,依此类推。但再好不过了。

首先,您为每个数据点创建N个节点 - 然后您开始以自己的方式备份 - 将每个两个叶子与一个节点连接在一起,然后将每个2个父节点连接在一起,依此类推,直到您到达1个节点。

或者你可以往下走——在任何一个N级,你都有2^N个孩子。

nodes = [...data...]

root = data.first; <== returns first element without removing it from nodes
while data.size > 1
  a=data.pop_front
  b=data.pop_front

  root = new node(a,b) <== create new node with a and b as children
  data.push_back(root) 

离开while循环时,root包含树的顶部。

 类似资料:
  • NowCoder 题目描述 平衡二叉树左右子树高度差不超过 1。 解题思路 // java private boolean isBalanced = true; public boolean IsBalanced_Solution(TreeNode root) { height(root); return isBalanced; } private int height(Tre

  • 排序二叉树中存在一个问题就是可能会退化成一个链表,当只有左子树或者右子树有节点的时候,此时排序二叉树就像链表一样,但因为排序二叉树在插入查询的时候还要判断左右子树的问题,这样查询的效率反而变低,从而引出了平衡二叉树 平衡二叉树又称平衡搜索树(Self-balance Binary Search Tree)又称AVL树,同时保证了查询和添加的效率。首先平衡二叉树是一颗排序二叉树,且它是空树或者他的每

  • 本文向大家介绍CSS 选择符有哪些?哪些属性可以继承?优先级算法如何计算? CSS3 新增伪类有哪些?相关面试题,主要包含被问及CSS 选择符有哪些?哪些属性可以继承?优先级算法如何计算? CSS3 新增伪类有哪些?时的应答技巧和注意事项,需要的朋友参考一下 1)id 选择器(#myid) 2)类选择器(.myclassname) 3)标签选择器(div,h1,p) 4)相邻选择器(h1 + p)

  • 主要内容:二叉排序树转化为平衡二叉树,构建平衡二叉树的代码实现,总结上一节介绍如何使用二叉排序树实现动态 查找表,本节介绍另外一种实现方式—— 平衡二叉树。 平衡二叉树,又称为  AVL 树。实际上就是遵循以下两个特点的二叉树: 每棵子树中的左子树和右子树的深度差不能超过 1; 二叉树中每棵子树都要求是平衡二叉树; 其实就是在二叉树的基础上,若树中每棵子树都满足其左子树和右子树的深度差都不超过 1,则这棵二叉树就是平衡二叉树。 图 1 平衡与不平衡的二叉树及结点的

  • 我试图理解二叉树的属性。但有一件事我不确定: 二叉树的dev.表示: > 如果任意两片树叶的深度差最大为1,则二叉树是平衡的。 我问我这两个定义是否相等,我的意思是定义。1统计Def。2和viceversa?...对我来说似乎是的...但是谁能用例子准确地解释我这个属性的(非)等价? 谢谢,帕特里克

  • 本文向大家介绍请问有哪些排序算法相关面试题,主要包含被问及请问有哪些排序算法时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 冒泡排序 是最简单的排序之一了,其大体思想就是通过与相邻元素的比较和交换来把小的数交换到最前面。这个过程类似于水泡向上升一样,因此而得名。举个栗子,对5,3,8,6,4这个无序序列进行冒泡排序。首先从后向前冒泡,4和6比较,把4交换到前面,序列变成5,3,8,4,6。