【问题标题】:Binary tree node keeping reference to its parent二叉树节点保持对其父节点的引用
【发布时间】:2021-10-06 23:15:51
【问题描述】:

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

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

但我想知道人们的想法?

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

谢谢

【问题讨论】:

    标签: binary-tree


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      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 上面所说,这真的不是作弊:构建数据结构来解决您的问题,不要担心它的道德问题 :-)

      【讨论】:

        【解决方案3】:

        来自Software Engineering Stack Exchange的交叉发帖。

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

        【讨论】:

          猜你喜欢
          • 2023-04-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多