【发布时间】:2015-02-08 20:26:09
【问题描述】:
我需要创建一个有 7 层的二叉树,所以我猜是 128 片叶子。但是,我需要在一开始就创建它,而不需要逐个添加节点。 我猜我按顺序写了一个递归函数。但问题是如何在创建第 7 层后结束递归。这里尝试了什么:
bool tree::create(node *ptr)
{
ptr = NULL;
if (ptr->right->right->right->right->right->right->right)
return true;
ptr->left = new node;
ptr->right = new node;
ptr->left = NULL;
ptr->right = NULL;
create(ptr->left);
create(ptr->right);
}
但是很容易看出,在第一次递归中尝试读取 ptr->right 时会发生错误,因为它尚未创建。
有什么方法可以创建或者我应该放弃这将导致我重新开始整个代码。
【问题讨论】:
-
如果您想更改
ptr,您的签名应如下所示bool tree::create(node *& ptr){。另请注意if (ptr->right->right->right->right->right->right->right)调用未定义的行为。 -
您的代码完全是一团糟,我认为您应该重新开始整个代码,但现在尝试逐步了解您在做什么。靠猜测编程是行不通的。
-
我认为你的意思是上面提到的“未定义行为”的内存违规,你是正确的参考调用。谢谢
-
@AhmetYılmaz:不,他真的是指 UB。 “访问冲突”是一种可能的(且相当无害的)表达方式。
-
@AhmetYılmaz 访问冲突是这里可能发生的最安全的事情。如果成功了,那就更危险了。
标签: c++ recursion memory tree binary-tree