具有父指针的二叉搜索树有什么优势?

时间:2016-12-31 17:18:11

标签: c++ binary-search-tree

到目前为止,我一直用左右指针实现二叉搜索树,如:

template<typename T>
struct BSTNode{
    BSTNode* left;
    BSTNode* right;
    T data;
}

我遇到了节点也有父节点指针的实现。你为什么想这么做?有什么权衡取舍?

2 个答案:

答案 0 :(得分:5)

从一个角度来看,你的问题是有效的,因为parent指针在结构中引入了冗余,这在几种情况下是可以避免的。但是在二叉树的情况下,这会给你带来巨大的好处,你可以跳过&#34; up&#34;一级(即从节点到其父节点)而不记住父节点的地址。如果节点的父节点已知,则可以非常有效地实现多种算法(例如,获取两个值之间的节点数)。

权衡是冗余:如果您修改树的结构(例如通过平衡树),您必须记住更新left/right和{{ 1}}指针以保持树的一致性。

答案 1 :(得分:3)

二进制搜索树指的是一类通用的二叉树。 对于 二进制搜索树,没有理由拥有父指针。

然而,存在更多专用的二叉树变体,其中父指针是有益的。例如,查找 AVL树红黑树。这些特化对树的布局施加了进一步的限制,以实现各种目标,例如通过确保树总是红黑树中的查找/插入/删除的保证O(log n)复杂性均衡

为了实现这些限制,父指针有时会派上用场。当然,它通过交换内存(指针)来实现速度(通过算法查找父节点)。

考虑您最喜欢的关于数据结构的书,看看如何以及为什么,或维基百科。