二叉树中的节点是否“传统”(或“道德”)是否保留对其父母的引用?
通常情况下,我不这么认为,仅仅因为树是有向图,因此定义PARENT - > CHILD链接的事实并不意味着也定义了CHILD ---> PARENT。 换句话说,通过保持对父级的引用,我们将以某种方式打破树的语义。
但我想知道人们的想法?
我问,因为我遇到了一个问题,即在树中找到两个给定节点的最低公共父级。如果每个节点都有对其父节点的引用,那么问题将非常容易解决,但这就像是作弊!
由于
答案 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.
};
正如史蒂芬迈耶上面所说,它真的不是作弊:建立数据结构来解决你的问题,不要担心它的道德问题: - )