3

二叉树中的节点保持对父节点的引用是“传统的”(或“道德的”)吗?

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

但我想知道人们是怎么想的?

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

谢谢

4

3 回答 3

2

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

如果您的应用程序需要在叶子到树干的方向上遍历树,那么最好的方法是实现对父节点的引用。

我发现最好使数据结构适合您的需求,而不是尝试使用其他逻辑来解决问题。毕竟,为什么树必须是有向图?使其定向是一个特定的实现,就像一个列表及其作为单链表或双链表的特定实现。

于 2013-05-17T17:24:55.443 回答
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.
};

正如 Steven Meyer 上面所说,这真的不是作弊:构建数据结构来解决您的问题,不要担心它的道德问题 :-)

于 2013-05-17T19:30:40.747 回答
0

来自软件工程堆栈交换的交叉发布。

维基百科的定义说“例如,将一棵树作为一个整体来看,可以谈论给定节点的“父节点”,但一般来说,作为一种数据结构,给定节点只包含其子节点的列表,但不包含对其父级的引用(如果有)。

于 2021-10-06T15:15:51.627 回答