二叉树的建立问题

#include <cstdlib>

#include <iostream>

 

#define OVERFLOW 1

#define OK 1

#define ERROR -1

 

typedef int Status;

typedef char TElemType; 

 

typedef struct BiTNode{

    TElemType data;

    BiTNode *lchild;

    BiTNode *rchild;

}BiTNode, *BiTree;


Status CreateBiTreeByPreOrder (BiTree &T){
//这里的函数形参不能是*T,如果是*T的话,建立起来的是以T的拷贝为根的树,而不是T.
//相当于值传递,这里应该用二级指针. 具体可参考: http://bbs.csdn.net/topics/390086990
    TElemType ch;
    std::cin >> ch;
if (ch == '#'){
//     if (ch == ‘ ’)
//这有个问题一直弄不明白,为什么用‘ ’的时候,无法结束呢???翻了翻C++ primer发现cin>>读取时,
//忽略开头所有的空白字符,如空格,换行符,tab等,直到再遇到空白字符时,读取终止。
T = NULL;
}else {
        T = (BiTree) malloc (sizeof (BiTNode));
        if (!T) exit(OVERFLOW);
   T->data = ch;
        CreateBiTreeByPreOrder (T->lchild);
        CreateBiTreeByPreOrder (T->rchild);
    }
return OK;   
}//CreateBiTree


//Visit functor.
Status PrintElement (TElemType e){
       std::cout<< e <<std::endl;
       return OK;
}

//PreOrderTraverse
int PreOrderTraverse (BiTree &T, Status (*Visit)(TElemType e)){
    if (T){
           if (Visit (T->data))
              if (PreOrderTraverse (T->lchild, Visit))
                 if (PreOrderTraverse (T->rchild, Visit)) return OK;
           return ERROR;
    }else return OK;
}

int main(int argc, char *argv[])
{
    BiTree tree;
    CreateBiTreeByPreOrder (tree);
    PreOrderTraverse (tree, PrintElement);
    
    system("PAUSE");
    return EXIT_SUCCESS;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值