二叉樹的建立和遍歷

網絡上有關二叉樹建立的代碼比較多,但粗略試了下,多數運行還是有問題,故本文給出了基於嵌套括號表示法的二叉樹創建代碼,如下圖二叉樹,其括號表示法爲

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;  
}

結果如圖



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章