问题标签 [tree-balancing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++ AVL 树平衡问题
我已经用 C++ 中的旧二叉树构建了一个 AVL 树以供练习,但它无法正常工作。我认为它可能没有正确更新节点的高度,但我无法找出问题的根源(我 90% 确定它与辅助函数 getHeight、setHeight、getBalance 有关)。
一些示例测试运行..:
添加 6,3,4 会导致右旋转,它应该会导致 RL 旋转
类似地添加 20,30,25 会导致 LL 旋转,而它应该会导致 LR 旋转
添加 20,30,10,5,6 在应该导致 RL 旋转时会导致两个单独的右旋转
我将不胜感激任何提示/帮助进一步解决这个问题。让我知道我是否可以提供更多信息来提供帮助。
谢谢你。
data-structures - 来自双向链表的平衡二叉搜索树
我正在尝试编写这个函数,该函数接受一个 doubleLinkedList 并在适当的位置构造一个平衡的二叉搜索树。TreeNode.left 相当于前一个指针,TreeNode.right 相当于下一个指针。我从这里的程序中获得灵感,但这不起作用:
http://www.geeksforgeeks.org/in-place-conversion-of-sorted-dll-to-balanced-bst/
java - 红黑树中的黑色深度?如何知道是否平衡?
我周二有期中考试,无法理解红黑树。我怎么知道树是平衡的?我知道这与正确数量的黑色节点和黑色深度有关。但我不太明白。我需要知道这一点,因为您将树旋转基于此。如果有人可以提供一步一步的解释,那就太好了。谢谢!
nodes - 在节点删除之前或之后平衡AVL树?
本练习要求学生从 AVL 树中删除一个节点。在这种情况下,这需要一些平衡,因为最深和最浅深度之间的差异> 1。但是平衡应该发生在删除之前还是之后?还是没关系?
java - 二叉搜索树平衡
我正在研究一个 BST,它将根据节点的命中及其元素平衡节点,其中命中是一个属性,当使用 find()、contains() 等找到节点时该属性会增加。树的根是节点具有最高的点击次数。我所有的代码都很好,除了在我增加命中后平衡树的平衡方法。我正在使用修改后的 AVL 树旋转方法(https://users.cs.fiu.edu/~weiss/dsj2/code/weiss/nonstandard/Rotations.java),我不比较元素,而是比较一个节点。无论我尝试什么,我都无法让它工作,我无法让树正确平衡这是我到目前为止的代码:
现在 balance 方法只是删除了它应该旋转的节点,我尝试调试它但看不出有什么问题。
algorithm - 平衡 AVL 树
我在处理平衡 AVL 树问题时遇到了麻烦,因为我的解决方案似乎与教科书后面的解决方案相冲突。我查看了 AVL 树的在线可视化,他们认为我的是正确的。我的课本错了吗?
然后我必须将 65 插入到这个 AVL 树中。这会导致不平衡,据我了解,需要左右旋转。
这是我想出的,并已通过http://robinsswei.github.io/VisGraphs/avltree.html确认:
这是我的教科书所说的正确答案:
哪一个是正确答案?
algorithm - 如何平衡单枝树?
例如,如果我们在一个左分支上按降序排列的值为 10、9 ... 1 的节点,我们如何在树上执行旋转以使其成为平衡的 AVL 树?我正在考虑重复单次右转,但有人可以在这里显示步骤顺序吗?
binary-tree - AVL/红黑树平衡规则是否可以扩展到任何不平衡树的情况?
我想知道AVL 树或红黑树平衡方法(通过简单旋转在每个节点插入时发生)是否可以在二叉树构造的任何阶段扩展到任何给定的二叉树。
我发现,对于任何给定的不平衡二叉树,遵循 AVL 或红黑旋转规则会导致出现平局,在这种情况下,您可以选择至少两种方式来平衡树。如果您遵循 AVL 规则,您将获得相同的级别差异,这意味着您可以选择至少两个节点来平衡树。
显然,您为平衡所做的任何决定都会导致不同的平衡树(也许其中一个在级别差异方面的情况更好)。我在一个简单的例子上测试了这个过程,我不确定它是否适用于所有情况,所以我想知道:
- 如果可以概括
- 如果有一个例子证明它不能被推广?
为什么还要考虑这种情况?
- 知道很有趣!
- 假设一个二叉树数据结构(并且您不想使用 AVL 或红黑)。所以你不想一直保持平衡,但有时你可能想在树的构建过程中保持平衡。
一个简单的例子:
- 假设我们的元素由 {1, 3, 5, 7}
- RR:向右旋转
- RL:向左旋转
如果你将它与 RR (pivot 5) 然后 RL (pivot 3) 平衡,它将如下所示(如果从一开始就使用 AVL 方法,则使用相同的树):