#include<iostream>
using namespace std
struct BTree
{char data
BTree*lchild,*rchild
}
void PreOrderTraverse( BTree *T ) {//先序.
if(T){
cout<<T->data
PreOrderTraverse(T->lchild)
PreOrderTraverse(T->rchild)
}
} // PreOrderTraverse
void InOrderTraverse( BTree *T ) {//中序.
if(T){
InOrderTraverse(T->lchild)
cout<<T->data
InOrderTraverse(T->rchild)
}
} // InOrderTraverse
void PosOrderTraverse( BTree *T ) {//后序.
if(T){
PosOrderTraverse(T->lchild)
PosOrderTraverse(T->rchild)
cout<<T->data
}
} // PosOrderTraverse
BTree *CreateBiTree(BTree *T)
{
char ch
ch=getchar()
if(ch=='#')T=NULL
else{
if(!(T=(BTree *)malloc(sizeof(BTree))))exit(0)
T->data =ch
T->lchild=CreateBiTree(T->lchild)
T->rchild=CreateBiTree(T->rchild)
}
return T
}
void main()
{ cout<<"请输入先序二叉树,没有左右孩子的用#表示"<<'\n'
BTree *t=CreateBiTree(t)
cout<<"先序"<<'\n'
PreOrderTraverse( t )
cout<<'\n'<<"中序"<<'\n'
InOrderTraverse( t )
cout<<'\n'<<"后序"<<'\n'
PosOrderTraverse( t )
cout<<'\n'
}
#include"stdio.h"#include"malloc.h"
typedef struct bitnode
{
char data
struct bitnode *lchild,*rchild
}bintnode,*bintree
bintree createbitree()
{
bintree t
char ch
scanf("%c",&ch)
if(ch==' ')
t=NULL
else
{
t=(bintnode *)malloc(sizeof(bintnode))
t->data=ch
t->lchild=createbitree()
t->rchild=createbitree()
}
return(t)
}
这就是建树的函数 要实现什么你自己在写。。。
完整程序自己写吧,我提供个思路:二叉树的节点包含三个指针:左指针,右指针,字符串链表的头指针;
构造一个通过两个字符串的头指针比较字符窜大小的函数;(先比较串长,再从头对位开始比较);
构造一个插入函数(递归)
最后查找函数(递归)返回查找元素距根的距离;