回 帖 发 新 帖 刷新版面

主题:二叉树问题

问好都是不懂的,请各位大虾解解惑
#include <iostream>
const int MAX = 200;
using namespace std;
//定义二叉树的结点 
typedef struct BiTNode
{
    char D;
    struct BiTNode *L, *R;
} BiTNode, *BiTree;//typedef这个东西是个嘛意思,后面那个指针又是咋回事???

//接受输入 
char str[MAX];
int i = -1;

//二叉树的建立
void Creat(BiTree &T) //为啥要在T前加&???这样有什么作用???
{
    i++;
    if (str[i] != '\0') 
    {
        if (str[i] == '#') 
        {
            T = NULL;
        } 
        else 
        {
            T = new BiTNode;
            T->D = str[i];
            Creat(T->L);
            Creat(T->R);
        }
    } 
    else 
    {
        T = NULL;
    }
}

//先序遍历
void PreOrder(BiTree T) //为什么此处又不用&???
{
    if (T) 
    {
        cout << T->D << " ";
        PreOrder(T->L);
        PreOrder(T->R);
    }
}

//中序遍历
void MidOrder(BiTree T) 
{
    if (T) 
    {
        MidOrder(T->L);
        cout << T->D << " ";
        MidOrder(T->R);
    }
}

//后序遍历
void PostOrder(BiTree T) 
{
    if (T)
    {
        PostOrder(T->L);
        PostOrder(T->R);
        cout << T->D << " ";
    }
}



//主函数 
int main()
 {
    BiTree T;//bitree不是个指针变量吗,能定义t这个变量吗??
    cout << "建立二叉树:" << endl;
    cout << "请输入二叉树的先序遍历序列" << endl;
    cout << "空节点用#表示,最大" << MAX << "字符" << endl;
    cin >> str;
    Creat(T);
    cout << "先序遍历输出:";
    PreOrder(T);
    cout << endl;
    cout << "中序遍历输出:";
    MidOrder(T);
    cout << endl;
    cout << "后序遍历输出:";
    PostOrder(T);
    cout << endl;   
    return 0;
}

回复列表 (共8个回复)

沙发


我也刚开始学,大概说一下自己的理解,等待高人指点
首先typedef就是定义了一种结构,BiTNode, *BiTree,前面那个是结构名称,后面那个是指向这个结构的指针,以后饮引用指针就可以了。BiTree &T,&在这个creat内是因为原来没有这个T,是新建立的,后面那个没有是因为引用的以前的。最后那一个,我学的是C版的,根本看不明白。。。

板凳

刚找到一个typedef的帖子,自己看看去吧http://blog.pfan.cn/zsoulmate/49676.html

3 楼

其实就是一个递归的使用

4 楼


谢谢

5 楼

问好都是不懂的,请各位大虾解解惑
#include <iostream>
const int MAX = 200;
using namespace std;
//定义二叉树的结点 
typedef struct BiTNode
{
    char D;
    struct BiTNode *L, *R;
} BiTNode, *BiTree;//typedef这个东西是个嘛意思,后面那个指针又是咋回事???

//接受输入 
char str[MAX];
int i = -1;

//二叉树的建立
void Creat(BiTree &T) //为啥要在T前加&???这样有什么作用???
{
    i++;
    if (str[i] != '\0') 
    {
        if (str[i] == '#') 
        {
            T = NULL;
        } 
        else 
        {
            T = new BiTNode;
            T->D = str[i];
            Creat(T->L);
            Creat(T->R);
        }
    } 
    else 
    {
        T = NULL;
    }
}

//先序遍历
void PreOrder(BiTree T) //为什么此处又不用&???
{
    if (T) 
    {
        cout << T->D << " ";
        PreOrder(T->L);
        PreOrder(T->R);
    }
}

//中序遍历
void MidOrder(BiTree T) 
{
    if (T) 
    {
        MidOrder(T->L);
        cout << T->D << " ";
        MidOrder(T->R);
    }
}

//后序遍历
void PostOrder(BiTree T) 
{
    if (T)
    {
        PostOrder(T->L);
        PostOrder(T->R);
        cout << T->D << " ";
    }
}



//主函数 
int main()
 {
    BiTree T;//bitree不是个指针变量吗,能定义t这个变量吗??
    cout << "建立二叉树:" << endl;
    cout << "请输入二叉树的先序遍历序列" << endl;
    cout << "空节点用#表示,最大" << MAX << "字符" << endl;
    cin >> str;
    Creat(T);
    cout << "先序遍历输出:";
    PreOrder(T);
    cout << endl;
    cout << "中序遍历输出:";
    MidOrder(T);
    cout << endl;
    cout << "后序遍历输出:";
    PostOrder(T);
    cout << endl;   
    return 0;
}

6 楼


1、typedef 是用来定义一个结构体类型,BiTNode是类型名, BiTree是指向BiTNode类型的指针类型,可以用它来定义指针,相当于BiTNode*;
2、void Creat(BiTree &T) 括号中的只是形参,表示调用此函数时要传入一个BiTree类型的变量,加&表示在此函数中,T为BiTNode类型,否则为BiTree;其实加不加&由你自己定,只是在函数中使用时有所不同

7 楼

您先过了语言关吧,找本好的 c++ 的书看看,推荐 C++ Primer

8 楼

我当年也是学习C那本的

我来回复

您尚未登录,请登录后再回复。点此登录或注册