網絡上有關二叉樹建立的代碼比較多,但粗略試了下,多數運行還是有問題,故本文給出了基於嵌套括號表示法的二叉樹創建代碼,如下圖二叉樹,其括號表示法爲
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 != '\0')
{
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;
}
結果如圖