【发布时间】:2017-10-16 09:16:31
【问题描述】:
所以我有一个带有根节点的队列。每个节点都有一个子节点或兄弟节点。根可以有多个子节点,但只能指向一个 child 节点。那个孩子可以有孩子,但也会有其他兄弟姐妹。这些兄弟姐妹都是根节点的孩子。最后一个没有兄弟姐妹的孩子,我们称其父节点为兄弟节点,因此称为根。
我遇到的问题是当我想删除父节点时。我必须遍历孩子,直到没有孩子为止。如果我这样做 if(currNode->sibling),这适用于所有儿童。但如果兄弟姐妹是根,我不应该认为它应该打破 if 语句。因为在执行此循环之前,我确实删除了 root。然后root = nullptr。那么为什么以兄弟为根的孩子仍然指向一个有效的位置而不是 nullptr 呢?非常感谢
【问题讨论】:
-
请出示代码,这样会容易很多。可能你没有在堆中创建变量(使用新关键字)..
-
指针是一种方式。 A指向B。B不知道它被指向。想一想,必须跟踪所有指向变量的潜在指针将是一场噩梦。呸。无论如何,
root指向一个节点。删除此节点并将root置空也不能将同级指向roots 节点的指针置空。因为root不知道还有谁在指向同一个节点。 -
啊,我明白了!这很令人困惑。所以我考虑到了这一点,最初并没有删除root。我刚刚检查了兄弟姐妹!= root。这个条件很容易满足,而且看起来更合适。感谢您的帮助!
-
也许你可以尝试指向指针(**)的指针。 currNode->sibling = &root;如果 root 为 nullptr,*currNode->sibling 也将为 nullptr。
-
@user2971569 谢谢,我会试试看会发生什么。