如何在树结构中从子级移动到父级?

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

如果您从根节点开始并向下递归,则可以避免使用父指针,因为您只需向上递归即可到达父节点。

【讨论】:

所以,我必须按照您的建议创建一个子数组,这与我的想法相同。谢谢。

以上是关于如何在树结构中从子级移动到父级?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不调用事件的情况下将数据从子级发送到父级(vue 2)

从子级到父级的跨站点 iframe postMessage

Vuejs 中从子级到父级的事件监听

如何为 v-select 组件从子级传递值到父级

我可以从子组件获取计算数据到父组件吗?

我如何将 useState 值从子级传递给父级