algorithm - 在摧毁树之前旋转它有什么好处?

标签 algorithm data-structures tree

我正在阅读this article ,其中提到我们可以通过以特定方式执行旋转来摆脱树的一侧,然后沿一个方向向下遍历树并删除元素。

虽然我明白他们想要做什么,但我不明白为什么

与简单的后序删除相比,这种类型的删除可以提供哪些优势?

我能想到的一个优点是节省递归使用的内存,但我认为与遍历树两次(一次用于旋转,然后用于删除)相比,这是微不足道的开销。我在这里遗漏了什么吗?

最佳答案

这篇文章似乎坚持认为这种方法的要点是避免递归(及其对堆栈空间的消耗):“嗯......如果我们重新排列节点以使它们没有任何左子树怎么办?然后我们可以直接向右下降,而不需要跟踪堆栈上的任何内容。”

一般来说,当我不能确定递归的深度是否合理时,我更愿意避免递归,因为在用完任何其他类型的内存之前,你就会用完堆栈空间 - 在某些情况下,因为系统是旨在限制递归以捕获导致无限递归的错误。但是,我认为这在这里不太重要,您已经承认同一包中的其他例程需要递归。另外,递归的深度取决于树的深度,对于平衡树来说,这将大致是它的节点数的对数,因此永远不应该太深。

关于algorithm - 在摧毁树之前旋转它有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12766871/

相关文章:

c - 我怎样才能构建这棵树?

java - 如何将数组列表中的数据设置到另一个数组

C++ 通过引用传递?

java - 比较java中的结构化数据

c - 删除二叉树中仅通过引用传递节点的节点

c - 将节点插入 Dllist

c++ - 在堆栈中搜索特定元素

algorithm - 重新访问树上的递归函数 (DFS) 中的某些节点

algorithm - 我们能说任何线段树都是平衡的吗?

algorithm - 用于计算有向无环图中每个顶点的不同路径数量的线性时间算法