【发布时间】:2014-04-10 03:00:32
【问题描述】:
我一直想为我的二叉搜索树(恰好是一个数组表示)编写remove() 方法。但在写之前,我必须考虑所有情况。省略所有情况(因为它们很容易),除非节点有两个孩子,在我到目前为止阅读的所有解释中,我看到的大多数情况都从已经平衡的二叉搜索树中删除了一个元素。在我看到从不平衡二叉搜索树中删除元素的少数情况下,我发现他们通过 zigs 和 zags 平衡它,然后删除元素。
有没有一种方法可以从不平衡的二叉搜索树中删除一个元素,而无需事先平衡它?
如果没有,写 AVL 树会更容易(以数组表示)吗?
【问题讨论】:
-
您是否在每个树节点中使用数组索引偏移量,或者您是否记得您所在的树级别并使用乘法来查找索引?如果是第二个,我相信你的树必须是平衡的。
-
数组包含节点,节点包含数据及其子节点的索引。 -1 如果没有孩子在场。
-
无论如何我都错了需要平衡。具有固定位置数组节点的不平衡树只会浪费空间但仍然有效。
标签: c++ algorithm binary-search-tree