BeatificDevin

。。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

注意:

  构造二叉树的时候要用双重指针,用单重指针时,要有返回值。

代码如下:

/*
此处输入空格代表空,默认按前序遍历完全二叉树的方式输入数据
形参是在执行函数时自动分配的,没有执行这个函数之前不占用存
储空间,当函数执行完毕后释放这个形参,所以我们要使用到双重指
针来构造树。这样,我们传进去的是树节点的指针的指针,这样函数
执行完成后即使这个“指针的指针“被释放掉了,我们通过*T保存的树
结点的数据还是可以通过树节点的指针T来调用。相反,如果我们传
进去如果是树结点的指针,当这个函数执行完毕后,这个指针被销毁
了,而且CreateBiTree()函数不返回任何值,所以等于这个函数没有
被调用。

*/
#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct BiTNode
{
    ElemType data;
    struct BiTNode *lchild;
    struct BiTNode *rchild;
}BiTNode,*BiTree;
typedef struct BiTNode *LinkTree;

void CreateBiTree(BiTree *T)
{
    char c;
    scanf("%c",&c);
    if(' ' == c)
    {
        (*T) = NULL;
    }
    else
    {
        (*T) = (LinkTree)malloc(sizeof(BiTNode));
        (*T)->data = c;
        CreateBiTree(&(*T)->lchild);
        CreateBiTree(&(*T)->rchild);
    }
}

void PreOrderTraverse(BiTree T,int level)
{
    if(T)
    {
        printf("%c->",T->data);
        PreOrderTraverse(T->lchild,level+1);
        PreOrderTraverse(T->rchild,level+1);
    }
}
void InOrderTraverse(BiTree T,int level)
{
    if(T)
    {
        InOrderTraverse(T->lchild,level+1);
        printf("%c->",T->data);
        InOrderTraverse(T->rchild,level+1);
    }

}

void PostOrderTraverse(BiTree T,int level)
{
    if(T)
    {
        PostOrderTraverse(T->lchild,level+1);
        PostOrderTraverse(T->rchild,level+1);
        printf("%c->",T->data);
    }

}
int main()
{
    int level = 1;
    BiTree T = NULL;
    CreateBiTree(&T);
    printf("前序遍历的结果为:\n");
    PreOrderTraverse(T,level);
    printf("\n中序遍历的结果为:\n");
    InOrderTraverse(T,level+1);
    printf("\n后序遍历的结果为:\n");
    PostOrderTraverse(T,level);
    return 0;
}

  

posted on 2014-12-17 23:38  BeatificDevin  阅读(633)  评论(0编辑  收藏  举报