二叉树的建立与遍历
创建二叉树的时候,传的参数是指向指针的的指针。
因为要改变指针的值,所以应该定义指向指针的指针。
#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); } }

浙公网安备 33010602011771号