二叉树的建立和遍历

网络上有关二叉树建立的代码比较多,但粗略试了下,多数运行还是有问题,故本文给出了基于嵌套括号表示法的二叉树创建代码,如下图二叉树,其括号表示法为

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

结果如图



原文地址:https://www.cnblogs.com/siahekai/p/11000794.html