函数头:
#include<stdio.h>
#include <stdlib.h>
#include<math.h> //数学函数,求平方根、三角函数、对数函数、指数函数...
#define MAXSIZE 100
//用于使用c++的输出语句
#include<iostream>
using namespace std;
二叉树结构体定义:
90%情况下用这个:
typedef struct BTNode
{
char data;
struct BTNode *lchild;
struct BTNode *rchild;
}BTNode;
但要会看懂这个:
typedef struct BiNode{
ElemType data;
struct BiNode *lchild,*rchild;
}BiNode,*BiTree;//定义了一个指针BiTree
//BiNode *p;
//BiTree p;
//上面两句代码是一样的意思
创建一棵二叉树(手动输入):
void createBiTree(BTNode* &T)
{
char ch;
cin>>ch;
if(ch=='#') T=NULL;
else
{
T=(BTNode *)malloc(sizeof(BTNode));
T->data=ch;
cout<<"put in \'"<<T->data<<"\' lchild"<<endl;
createBiTree(T->lchild);
cout<<"put in \'"<<T->data<<"\' rchild"<<endl;
createBiTree(T->rchild);
}
}
用数组创建二叉树:
BiTree create(ElemType A[],int i)//i表示当前元素下标
{
if(i>MAXSIZE)//递归出口,MAXSIZE是数组实际长度
return NULL;
BiNode *p=(BiNode *)malloc(sizeof(BiNode));
p->data=A[i-1];//头结点放进去
//树是从地址1开始创建的,但实际中要从数组的0地址开始,所以i要减1
p->lchild=create(A,2*i);//递归创建左子树
p->rchild=create(A,2*i+1);
return p;
}
先序遍历:
void preOrder(BTNode *t){
if(!t)
return;
visit(t);
preOrder(t->lchild);
preOrder(t->rchild);
}
中序遍历:
访问这个结点:
void visit(BTNode *p){
cout<<p->data<<"\t";
//...
}