递归创建和输出M叉树

来源:互联网 发布:windows xp共享文件夹 编辑:程序博客网 时间:2024/05/20 07:13

 M 叉树采用列表法表示,即每棵子树对应一个列表,列表的结构为:子树根结点的值部分 (设为一个字符和用“( )”,括起来的各子树的列表 (如有子树的话) ,各子列表间用“,”,分隔。例如下面的三叉树可用列表 a( b( c,d ),e,f( g,h,i ))表示。

#include<iostream>//#include<stdio.h>using namespace std;#define M 3typedef struct node{char val;struct node* subTree[M];}NODE;char buf[255],*str = buf;NODE * d = NULL;NODE * makeTree(){int k;NODE *s;s = new NODE();s->val = *str++;for(k=0;k<M;k++){s->subTree[k] = NULL;}if(*str=='('){k = 0;do{str++;s->subTree[k] = makeTree();if(*str==')'){str++;break;}k = k + 1;}while(k<M);}return s;}void walkTree(NODE * t){if(t!=NULL){cout<<t->val;if(t->subTree[0]==NULL)return ;cout <<"("; for(int i=0;i<M;i++){walkTree(t->subTree[i]);if(i!=M-1&&t->subTree[i+1]!=NULL)cout << ',';}cout << ')';}}int main(){cout << "Enter exp: ";cin >> str;d = makeTree();walkTree(d);cout << endl;return 0;}


原创粉丝点击