#include<stdio.h> #include<malloc.h> #include<iostream> //定义节点 typedef struct BiNode{ char data; struct BiNode *lch; struct BiNode *rch; }BiNode,*BiTree; //先序拓展序列建立二叉树 void Create(BiTree &T) { T =(BiNode*) malloc (sizeof(BiNode)); printf("Enter the data "); scanf(" %c",&T->data); if(T->data=='#') T = NULL; if(T){ printf(""); Create(T->lch); Create(T->rch); } } //先序遍历 (递归) void Preorder (BiTree T) { if (T) { printf(" %c",T->data); // 访问根结点 Preorder(T->lch); // 遍历左子树 Preorder(T->rch);// 遍历右子树 } } //中序遍历 (递归) void Inorder (BiTree T) { if(T) { Inorder(T->lch); printf(" %c",T->data); Inorder(T->rch); } } //后序遍历 (递归) void Postorder (BiTree T) { if(T) { Postorder(T->lch); Postorder(T->rch); printf(" %c",T->data); } } int main() { //建树 printf("The fuction Create() is called. "); BiTree T; Create(T); //三种遍历递归算法 printf(" "); printf("The fuction Preorder() is called. "); Preorder(T); printf(" "); printf("The fuction Inorder() is called. "); Inorder(T); printf(" "); printf("The fuction Postorder() is called. "); Postorder(T); printf(" "); system("pause"); }</span>
二叉树建立的及递归遍历
#include <iostream> #include <stdlib.h> #include <malloc.h> #include <stdio.h> typedef struct node { char data; struct node *lchild; struct node *rchild; }*BiTree; void creatBT(BiTree &T)//建立一个二叉树的函数 { char ch; scanf("%c",&ch); if(ch=='.') { T=NULL;// . 代表空子树; } else { T=(node *)malloc(sizeof(node));//分配一个node的空间 if(!T)exit(0); T->data = ch;//给T赋值 creatBT(T->lchild);//给左子树赋值 creatBT(T->rchild);//给右子树赋值 } } void pre_order(node *T)//前序遍历二叉树 { if(T) { printf("%c ",T->data); pre_order(T->lchild); pre_order(T->rchild); } } void mid_order(node *T)//中序遍历二叉树 { if(T) { mid_order(T->lchild); printf("%c ",T->data); mid_order(T->rchild); } } void behind_order(node *T)//后序遍历二叉树 { if(T) { behind_order(T->lchild); behind_order(T->rchild); printf("%c ",T->data); } } int main() { node *T; printf("请输按先序序列输入一串字符,当子树为空时,用.来代替 "); creatBT(T);//建树 printf("建树成功,T指向二叉树的根! "); printf(" 前序遍历二叉树的结果是:"); pre_order(T); printf(" 中序遍历二叉树的结果是:"); mid_order(T); printf(" 后序遍历二叉树的结果是:"); behind_order(T);printf(" "); system("pause"); return 0; }</span>
二叉树的层次遍历
#include <stdio.h> #include<stdlib.h> typedef struct Bitree { int data; struct Bitree *Lchild,*Rchild; }BitreeNode,*LinkBitree; typedef struct QueueList { LinkBitree data[20]; int front,rear; }QueueList,*LinkQueue; LinkBitree CreatBitree(); void LevelOrderTraverse(LinkBitree); void InitQueue(LinkQueue); int main() { LinkBitree BitreeHead; printf("请输入根结点的值e:"); BitreeHead=CreatBitree(); LevelOrderTraverse(BitreeHead); return 0; } LinkBitree CreatBitree() { int e_data; LinkBitree BitreeHead; scanf("%d",&e_data); if(e_data!=0) { BitreeHead=(LinkBitree)malloc(sizeof(BitreeNode)); if(BitreeHead==NULL) { printf("Error!!"); } else { BitreeHead->data=e_data; printf("请输入结点%d的左孩子结点的值:e= ",BitreeHead->data); BitreeHead->Lchild=CreatBitree(); printf("请输入结点%d的右孩子结点的值:e= ",BitreeHead->data); BitreeHead->Rchild=CreatBitree(); } } else { BitreeHead=NULL; } return BitreeHead; } void LevelOrderTraverse(LinkBitree BitreeHead) { LinkQueue Q; Q=(LinkQueue)malloc(sizeof(sizeof(QueueList))); InitQueue(Q); if(BitreeHead!=NULL) { Q->data[Q->rear]=BitreeHead; Q->rear=Q->rear+1; } while(Q->front!=Q->rear) { printf("%d ",Q->data[Q->front]->data); if(Q->data[Q->front]->Lchild!=NULL) { Q->data[Q->rear]=Q->data[Q->front]->Lchild; Q->rear=Q->rear+1; } if(Q->data[Q->front]->Rchild!=NULL) { Q->data[Q->rear]=Q->data[Q->front]->Rchild; Q->rear=Q->rear+1; } Q->front=Q->front+1; } } void InitQueue(LinkQueue Q) { Q->front=Q->rear=0; }