二叉树的建立与遍历

 创建二叉树的时候,传的参数是指向指针的的指针。

因为要改变指针的值,所以应该定义指向指针的指针。

#include <stdio.h>
#include <stdlib.h>
#define OVERFLOW -1

typedef char TElemType;
//二叉树的二叉链表结构定义
typedef struct BiTNode{
    TElemType data;                    //节点数据
    struct BiTNode *lchild, *rchild;//左右孩子节点
}BiTNode, *BiTree;

int main(){
void CreateTree(BiTree *T);
void preOrderTraverse(BiTree T);
BiTree T;
//构造二叉树
CreateTree(&T);
//访问二叉树
preOrderTraverse(T);
printf("\n");
return 0;
}

//创建二叉树
void CreateTree(BiTree *T){//因为要改变指针的值,所以应该定义指向指针的指针
    TElemType ch;
    scanf("%c",&ch);
    if(ch=='#')
        *T=NULL;
    else{
        *T=(BiTree)malloc(sizeof(BiTNode));    //sizeof(类型)返回某类型数据占用的内存大小
        if(!*T)    exit(OVERFLOW);
        (*T)->data=ch;                //注意遍历的次序
        CreateTree(&(*T)->lchild);    //构造左子树
        CreateTree(&(*T)->rchild);    //构造右子树
    }
}

//访问二叉树
void preOrderTraverse(BiTree T){
    if(T==NULL) return;
    else{
        printf("%c",T->data);//此处定义对根结点的访问就是打印节点数据,也可以定义成其他的
        preOrderTraverse(T->lchild);
        preOrderTraverse(T->rchild);
    }
}

 

posted @ 2017-08-09 15:50  Allen101  阅读(109)  评论(0)    收藏  举报