【发布时间】:2017-04-23 02:50:32
【问题描述】:
我正在尝试创建一棵二叉树。唯一给我的是树中节点的数量。我想到的第一件事是使用索引(BFS 顺序)来跟踪总节点数,然后使用递归定义。这是我的伪代码。
N = 10 //binary tree total node count
i = 0 //global integer
function()
if i > N
return True
create node i
i = i + 1
function(i) //left
i = i + 1
function(i) //right
我必须在这个定义中使用一个全局变量,这让我觉得我可能违反了递归规则。有没有更好的方法来做我所做的事情,如果是这样,可以改进吗?
注意:我问的是理论方法,不是代码。
编辑:我刚刚意识到这个方法失败了。我愿意接受建议。
澄清:这棵树的要求是不向深度添加元素,如果之前的深度没有被节点填充(所有节点都有2个孩子),请原谅我没有提到这一点之前,至于我在cmets中提到的堆栈,和问题无关,只是迭代遍历树的常规方式。
【问题讨论】:
-
问题不是说需要递归生成树;也许你误解了这个问题。至于生成的树:它基本上是一个链表,因为只会创建左孩子。至于
i:您的代码不正确,但它已经是没有全局变量的解决方案的一半。您已经在没有参数的情况下定义了function,但将其与i一起用作参数... -
@Paul 我选择将递归用于学习目的。但迭代法也适用,需要在程序中定义一个栈。
-
你应该弄清楚你真正想要什么。特别是:对树有什么要求?您的算法创建了一个完美的树,除了树将包含
N + 1节点这一事实。而这个问题和堆栈有什么关系? -
@Paul 请检查编辑。
-
好的。我会发布解决方案
标签: c algorithm tree binary-tree