c++ - 使用父指针的二叉搜索树有什么优点?

标签 c++ binary-search-tree

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

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

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

最佳答案

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

权衡是冗余:如果您修改树的结构(例如通过平衡树),您必须记住同时更新左/右parent 指针来保持树的一致性。

关于c++ - 使用父指针的二叉搜索树有什么优点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41410377/

相关文章:

c++ - 如何在Ubuntu的Qt Creator中集成chromium浏览器项目

data-structures - AVL树删除规则

algorithm - 在具有 635 个元素的 BST 中查找元素的比较次数?

java - Java 中的二叉树静态方法

c++ - 标准化 1MB 文本文件的最有效方法?

c++ - libstdc++ 的 make_shared 布局是否在 gcc 4.x 和 gcc 6.x 之间发生了变化?

c++ - 在支持 11 的机器上最高 D3D_FEATURE_LEVEL 是 9.3

algorithm - 在 BST 中找到 k 个后继者的时间复杂度

c++ - 二叉树旋转

c++ - 如何使用 C++ 读取 MNIST 数据集?