C 如何创建一个树,在其中找到正确的节点以添加子节点?

C 如何创建一个树,在其中找到正确的节点以添加子节点?,c,algorithm,data-structures,tree,C,Algorithm,Data Structures,Tree,构建树的最佳方法是什么,其中输入的格式为(a,b),a是父节点,b是子节点?(节点1是根节点) 例如: 1 2 //adds node #2 as the children of #1 (the root) 1 3 //adds node #3 as the second children of the root 2 4 //adds node #4 as the children of node #2 etc... 如果这种树类似于二叉树(因为对于给定的父节点,左边的子节点是较小的值,右边的

构建树的最佳方法是什么,其中输入的格式为
(a,b)
a
是父节点,
b
是子节点?(节点1是根节点) 例如:

1 2 //adds node #2 as the children of #1 (the root)
1 3 //adds node #3 as the second children of the root
2 4 //adds node #4 as the children of node #2
etc...
如果这种树类似于二叉树(因为对于给定的父节点,左边的子节点是较小的值,右边的子节点是较大的值),我理解如何创建这种树。但是,对于我的树,父节点可以拥有的子节点数量不是固定的。我怎样才能有效地创建它?我很难理解算法如何迭代并找到正确的节点(输入的
a
部分),这样它就可以添加另一个节点作为子节点(输入的
b
部分),因为一个节点可以拥有的子节点数量是不固定的


编辑:我想添加的另一件事是:每个叶节点(没有子节点的节点)将被分配一些值。我需要递归(或其他方法)遍历树,以便计算每个节点的值:父节点值是其所有子节点值的总和。

在每个节点中存储正确的子节点和同级地址

当您收到
a,b
时,如果节点
a
没有正确的子节点,请将
b
作为正确的子节点插入,如果有正确的子节点,请跟随正确子节点的同级节点查找最后一个子节点,并将
b
作为最后一个节点的同级节点插入


遍历树:

我认为该算法可以首先深入遍历树:

traverse(Node) 
 visit (Node) // pre order 
 if (Node.RightChild != Null)
  n = Node.RightChild
  while(n.LeftSibling != Null)
   traverse ( n.LeftSibling )
   n = n.LeftSibling
  end
 end
end

将子节点存储为链表(或数组)通常就足够了(不过,根据树的类型,其他表示可能更有效)

通常,您会有一个映射或节点数组

在查找
a
时,只需在映射或数组中查找它

然后您只需将
b
添加到子项列表中

我需要递归地遍历树


这将涉及一个简单的或。

嗯。。。我考虑过这一点,但现在我有另一个问题:在我构建树之后,叶节点(没有任何子节点的节点)将有一个给定的输入值(与值
(a,b)
)不同的值)。我需要以某种方式递归地计算每个节点的值,其中父节点等于子节点的所有值之和。这对您提供的方法有效吗?这个问题可能更适合程序员。stackexchange.com。你能阻止类似的事情发生吗?1 2, 2 1; 本质上是一个父->子,子->父的循环。