问题描述
- 二叉树递归中,将递增的静态变量最后变回零,怎么做?
-
//按照前序遍历序列建立二叉树
void CreateBTree_Pre(BTNode *&root, DataType Array[])
{
static int count=0; //静态变量count
char item=Array[count];//读取Array[]数组中的第count个元素
count++;
if(item == '#') //如果读入#字符,创建空树
{ root = NULL; return ;}
else
{
root = new BTNode;
root->data = item;
CreateBTree_Pre (root->lchild,Array); //建左子树
CreateBTree_Pre (root->rchild,Array); //建右子树
}
}
我发现一个问题,这个建立二叉树,只能在main函数中建立一次,执行了一次CreateBTree_Pre函数后,count的值就非零了。我要让这函数执行完后count变回零,怎么写?
我把count=0放在else块的最后,经测试不行,把count--放在函数最后,经测试也不
行。这个在递归中将递增的静态变量最后变回零,怎么做啊?越想越乱了......
解决方案
这个简单啊,你在CreateBTree_Pre的最后加一句count=0;就行了,这样每次运行完都是0
解决方案二:
我找到办法了,把二叉树的图画出来就会发现,当count的值为Array数组的长度时,
在之后count的值就不会再用到,此时可把count的值赋为0
//按照前序遍历序列建立二叉树
void CreateBTree_Pre(BTNode *&root, DataType Array[])
{
int i;
for (i = 0; Array[i] != ''; i++);//取得Array数组的长度
static int count=0; //静态变量count
char item=Array[count];//读取Array[]数组中的第count个元素
count++;//最终值为Array数组长度
if(item == '#') //如果读入#字符,创建空树
{ root = NULL; return ;}
else
{
root = new BTNode;
root->data = item;
CreateBTree_Pre (root->lchild,Array); //建左子树
CreateBTree_Pre (root->rchild,Array); //建右子树
if (count == i)
count = 0;
}
}
时间: 2024-09-28 07:10:06