遍历-二叉树递归中,将递增的静态变量最后变回零,怎么做?

问题描述

二叉树递归中,将递增的静态变量最后变回零,怎么做?

//按照前序遍历序列建立二叉树
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

遍历-二叉树递归中,将递增的静态变量最后变回零,怎么做?的相关文章

先序遍历二叉树的递归实现与非递归实现深入解析

以下是对先序遍历二叉树的递归实现与非递归实现进行了详细的分析介绍,需要的朋友可以过来参考下   1.先序遍历二叉树  递归实现思想:若二叉树为空,返回.否则 1)遍历根节点: 2)先序遍历左子树: 3)先序遍历右子树: 代码: 复制代码 代码如下: template<typename elemType> void PreOrder(nodeType<elemType> *root)  {      if(root==NULL)          return ;      visi

先序遍历二叉树的递归实现与非递归实现深入解析_C 语言

1.先序遍历二叉树  递归实现思想:若二叉树为空,返回.否则 1)遍历根节点:2)先序遍历左子树:3)先序遍历右子树: 代码: 复制代码 代码如下: template<typename elemType> void PreOrder(nodeType<elemType> *root)  {      if(root==NULL)          return ;      visit(root->data); // visit the data    PreOrder(ro

php中静态类与静态变量用法的区别分析

 static是定义一个静态对象或静态变量,关于static 定义的变量或类方法有什么特性我们看完本文章的相关实例后就见分晓了. 1. 创建对象$object = new Class(),然后使用"->"调用:$object->attribute/function,前提是该变量/方法可访问. 2. 直接调用类方法/变量:class::attribute/function,无论是静态/非静态都可以,但是有前提条件. A. 如果是变量,需要该变量可访问. B. 如果是方法,除了

php中静态类与静态变量用法区别解析

 static是定义一个静态对象或静态变量,关于static 定义的变量或类方法有什么特性我们看完本文章的相关实例后就见分晓了.   1. 创建对象$ob ject = new Class(),然后使用"->"调用:$ob ject->attribute/function,前提是该变量/方法可访问.   2. 直接调用类方法/变量:class::attribute/function,无论是静态/非静态都可以,但是有前提条件. A. 如果是变量,需要该变量可访问. B. 如果

php中静态类与静态变量用法的区别分析_php技巧

本文实例分析了php中静态类与静态变量用法的区别.分享给大家供大家参考.具体分析如下: static是定义一个静态对象或静态变量,关于static 定义的变量或类方法有什么特性我们看完本文章的相关实例后就见分晓了. 1. 创建对象$object = new Class(),然后使用"->"调用:$object->attribute/function,前提是该变量/方法可访问. 2. 直接调用类方法/变量:class::attribute/function,无论是静态/非静态

dll中的静态变量,试用了你就会想哭

问题描述 把下面的类编译成dllpublicclassClass1{publicstaticintgg;staticClass1(){gg++;System.Web.HttpContext.Current.Response.Write(DateTime.Now)}}在页面中调用上面的静态变量protectedvoidPage_Load(objectsender,EventArgse){Response.Write(Class1.gg);}想哭了吧,每次页面刷新,Class1类的静态构造函数都被调

Java 中的 static 使用之静态变量&amp;#183;静态方法&amp;#183;静态初始化块

Java 中的 static 使用之静态变量 大家都知道,我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立.然而在某些时候,我们更希望该类所有的对象共享同一个成员.此时就是 static 大显身手的时候了!! Java 中被 static 修饰的成员称为静态成员或类成员.它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享.静态成员可以使用类名直接访问,也可以使用对象名进行访问.当然,鉴于他作用的特殊性更推荐用类名访问~~ 使用 static 可以修饰变量.方法和

有关进程空间,全局变量,静态变量

[创新性声明]本文没有本质上的创新性内容.属于一些实验和总结,有少量主观推测成分(有待进一步证实).写这一类文章是非常危险的,因为有很多东西可能是我们不了解和比较模糊的,这很可能会出现错误的主观臆测,不仅仅是令明真相者贻笑大方的问题,更可怕的在于传播"错误",这是我最为诚惶诚恐的一点.比如,我之前见到我指点过他的sun先生对于Photoshop中置换滤镜中的他的那些主观错误结论已经传遍网络,尽管可能没有太多人能关注到这个层面,但是我还是为这些错误的观点在网络上比比皆是而深感遗憾.正因为

JNI/NDK开发指南(七)——C/C++访问Java实例变量和静态变量

       转载请注明出处:http://blog.csdn.net/xyang81/article/details/42836783        在上一章中我们学习到了如何在本地代码中访问任意Java类中的静态方法和实例方法,本章我们也通过一个示例来学习Java中的实例变量和静态变量,在本地代码中如何来访问和修改.静态变量也称为类变量(属性),在所有实例对象中共享同一份数据,可以直接通过[类名.变量名]来访问.实例变量也称为成员变量(属性),每个实例都拥有一份实例变量数据的拷贝,它们之间修