网络上有关二叉树建立的代码比较多,但粗略试了下,多数运行还是有问题,故本文给出了基于嵌套括号表示法的二叉树创建代码,如下图二叉树,其括号表示法为
A(B(E,F(J,K),G),C,D(H,I))
当下面程序运行是 (g++ xxx.cpp(文件名) -o xxxx(可执行文件名)),输入A(B(D(F,G),),C(,E(H,)))则能够得到该树的先序遍历结果ABDFGCEH
树如下:
A
B C
D E
F G H
#include <iostream>
#include <stdio.h>
#include <malloc.h>
#define MAXSIZE 100
//demo: A(B(D(F,G),),C(,E(H,)))
using namespace std;
typedef struct Node{
char data;
struct Node * lchild,* rchild; // 左右孩子
} BitNode;
BitNode *CreatBiTree(char *Str)
{
BitNode *s[MAXSIZE],*p,*B=NULL;
int top=-1,i=0,t;
char ch;
ch=Str[0];
while(ch != ' ')
{
switch(ch)
{
case '(':top++;s[top]=p;t=1;break;
case ')':top--;break;
case ',':t=2;break;
default: p=(BitNode *)malloc(sizeof(BitNode));
p->data=ch;p->lchild=p->rchild=NULL;
if(B==NULL) B=p;
else
if(t==1) s[top]->lchild=p;
else if(t==2) s[top]->rchild=p;
}
i++;ch=Str[i];
}
return B;
}
void PreOrderTraverse(BitNode* &T){ // 先序遍历二叉树
if(T){ // 当节点不为空时执行
cout << T->data;
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
else
cout <<" ";
}
int main()
{
char Str[100],ch;
cout << "括号表示法创建二叉树" << endl;
BitNode* T;
gets(Str);
T=CreatBiTree(Str);
cout << "二叉树前序遍历:" << endl;
PreOrderTraverse(T);
cout<<endl;
return 1;
}
结果如图