c++ - 如何在树结构中从子节点移动到父节点?

标签 c++ c visual-c++ tree parent-child

struct node
{
    int data;
    node *child;
    node *sibling
};

我想要一个从 child 移动到 parent 的循环。如果一棵树的根有 5 个 child ,那么从最后一个 child 开始到根。这意味着循环应该以相反的方式移动。

事实上,如果我有一个 child 数组,这可能很容易,但是如果我只有一个 child parent 关系怎么办,在这种情况下,每个 child 都有一个 parent ,那么我是否有可能从 child 到 parent 直到我 Root 。

最佳答案

您需要一个父指针才能在循环中直接从子指针移动到父指针。 我发现这很有效。

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

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

关于c++ - 如何在树结构中从子节点移动到父节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29044529/

相关文章:

c++ - 外部 C 和结构方法

c++ - 模板和 std::numeric_limits

c++ - std::initializer_list 作为函数参数

c - 读取标准输入(并存储值)管道到子级,进行剪切并返回值

c - Visual Studio 2017 是否对 C 进行语法检查?

c++ - 将 int 矩阵数组放入 C++ 对象时出现问题

c++ - C++ 编译器可以自动为我优化 float 为 double 吗?

与 Windows 相比,Linux 上的代码速度较慢

c - 不兼容的指针类型 char** 和 char* 错误

c++ - Visual Studio 问题/C++