如何在树结构中从子级移动到父级?
Posted
技术标签:
【中文标题】如何在树结构中从子级移动到父级?【英文标题】:How to move from Child to Parent in a tree structure? 【发布时间】:2015-03-14 01:42:34 【问题描述】:struct node
int data;
node *child;
node *sibling
;
我想要一个从孩子到父母的循环。如果树的根有 5 个孩子,则从最后一个孩子开始到根。意味着循环应该以相反的方式移动。
事实上,如果我有一个孩子数组可能会很容易,但是如果我只有一个孩子父母关系呢,在这种情况下,每个孩子都有一个父母,那么我有可能从孩子转到父母吗直到我获得root权限。
【问题讨论】:
如果你想从一个孩子转到一个父母,你需要一个指向你回到父母的节点的指针。否则,只能从根到节点,不能返回。 一般来说,这样的树节点应该有父、子、下一个、上一个。树本身应该总是知道根。你也标记了visual-c++,也许你正在寻找SendMessage TVM_GETNEXTITEM TVGN_ROOT
我明白了,谢谢。
【参考方案1】:
您需要一个父指针才能在循环中直接从子节点移动到父节点。 我觉得这行得通。
struct node
int value;
node * parent;
node ** childArray;
int NumberOfChildren;
您在根节点上将 parent 设置为 null,并在叶(最终)节点上将 childArray 指针设置为 null。
当你想在树中移动时,你使用一个节点*。
例如
node * PCurrentNode = &MyNode;
PCurrentNode = MyNode->Parent;//Move Up
PCurrentNode = MyNode->ChildNodes[5]//Move to the 5th child node
如果您从根节点开始并向下递归,则可以避免使用父指针,因为您只需向上递归即可到达父节点。
【讨论】:
所以,我必须按照您的建议创建一个子数组,这与我的想法相同。谢谢。以上是关于如何在树结构中从子级移动到父级?的主要内容,如果未能解决你的问题,请参考以下文章