#include<iostream> using namespace std; typedef char Elemtype; struct BTreeNode{ Elemtype data; BTreeNode *left; BTreeNode *right; }; void InitialBTree(BTreeNode *&BT) { BT=NULL; } void CreatBTree(BTreeNode * &BT,char *a) { BTreeNode *s[10]; int top=-1; BT=NULL; BTreeNode *p; int k;int i=0; while(a[i]) { switch(a[i]){ case ' ':break; case '(':top++;s[top]=p;k=1;break; case ')':top--;break; case ',':k=2;break; default: p=new BTreeNode; p->data=a[i]; p->left=p->right=NULL; if(BT==NULL) BT=p; else { if(k==1)s[top]->left=p; else s[top]->right=p; } } i++; } } bool FindBTree(BTreeNode *&BT,Elemtype item) { if(BT!=NULL) { if(BT->data==item) return true; else { FindBTree(BT->left,item); FindBTree(BT->right,item); } } return false; } void ClearBTree(BTreeNode *&BT) { if(BT!=NULL) { ClearBTree(BT->left); ClearBTree(BT->right); delete BT; BT=NULL; } } void PrintBTree(BTreeNode *BT) { if(BT!=NULL) { cout<<BT->data; if(BT->left!=NULL||BT->right!=NULL) { cout<<"("; PrintBTree(BT->left); if(BT->right!=NULL) cout<<","; PrintBTree(BT->right); cout<<")"; } } } int BTreeDepth(BTreeNode *&BT) { if(BT==NULL) return 0; else { int len1=BTreeDepth(BT->left); int len2=BTreeDepth(BT->right); if(len1>len2) return len1+1; else return len2+1; } } int main() { BTreeNode *t; InitialBTree(t); char a[50]={'A','(','B','(','C',')',',','D','(','E','(','F',',','G',')',',','H','(',',','I',')',')',')'}; CreatBTree(t,a); PrintBTree(t); cout<<endl; cout<<BTreeDepth(t)<<endl; cout<<FindBTree(t,'x')<<endl; cout<<FindBTree(t,'A')<<endl; ClearBTree(t); cout<<BTreeDepth(t)<<endl; PrintBTree(t); return 0; }
转载于:https://www.cnblogs.com/huangkq1989/archive/2010/07/07/2522665.html