二进制树节点保持对其父节点的引用

时间:2013-05-17 16:53:39

标签: binary-tree

二叉树中的节点是否“传统”(或“道德”)是否保留对其父母的引用?

通常情况下,我不这么认为,仅仅因为树是有向图,因此定义PARENT - > CHILD链接的事实并不意味着也定义了CHILD ---> PARENT。 换句话说,通过保持对父级的引用,我们将以某种方式打破树的语义。

但我想知道人们的想法?

我问,因为我遇到了一个问题,即在树中找到两个给定节点的最低公共父级。如果每个节点都有对其父节点的引用,那么问题将非常容易解决,但这就像是作弊!

由于

2 个答案:

答案 0 :(得分:0)

如何实现二叉树应该取决于您的需求。

如果您的应用程序需要在leaf to trunk方向上进行树遍历,那么最好的方法是实现对父节点的引用。

我发现最好根据您的需要调整数据结构,而不是尝试使用其他逻辑进行变通。毕竟,为什么树必须是有向图?使其定向是一个特定的实现,非常类似于列表及其作为单链接或双链接列表的具体实现。

答案 1 :(得分:0)

它仍然可以是所有权的有向图。考虑以下节点:

template <typename T>
struct node
{
    T data_;
    std::unique_ptr<node> left_child_;  // I own my children.
    std::unique_ptr<node> right_child_;
    node* parent_; // Just lookin' at my parent.
};

正如史蒂芬迈耶上面所说,它真的不是作弊:建立数据结构来解决你的问题,不要担心它的道德问题: - )