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; 本质上是一个父->子,子->父的循环。