C++-计算二叉树深度时,为什么当m和n作为局部变量和全局变量时的结果不同?当作为全局变量并把它们初始化为0和1时的结果一样的?

C++-计算二叉树深度时,为什么当m和n作为局部变量和全局变量时的结果不同?当作为全局变量并把它们初始化为0和1时的结果一样的?

偏爱自由 发布于 2017-04-28 字数 730 浏览 1037 回复 1
//作为全局变量时
int n=1;
int m=1;
//int n=0;
//int m=0;
//.........6. 计算二叉树的深度.........
int Depth(BiThrTree T)
{
if(T==NULL) return 0;
else{
m=Depth(T->lchild);
n=Depth(T->rchild);
if(m>n) return (m+1);
else return (n+1);
}
}

//局部变量时
//.........6. 计算二叉树的深度.........
int Depth(BiThrTree T)
{
int n;
int m;
if(T==NULL) return 0;
else{
m=Depth(T->lchild);
n=Depth(T->rchild);
if(m>n) return (m+1);
else return (n+1);
}
}
当按先序遍历输入ABC##DE#G##F###时,全局的深度是4,局部的深度是5

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

泛泛之交 2017-06-16 1 楼

按照你给的例子ABC##DE#G##F###,局部的树的深度为5是正确的.
使用全局变量之所以错误,是因为在每一次递归中先调用m=Depth(T->lchild);得到m的值,但是在下一个n=Depth(T->rchild);中的递归调用,改变了m的值,即此时的m是n的左子树长度,总是比n小,最后全局返回的是右子树的深度。
对于递归尽量不要用全局变量,因为每次递归调用都有可能会改变全局变量的值,除非你很清楚这些改变的发生是否是你所期待的。