简单的广义表建树,但是却纠结了几个小时,总之是太囧了。。。代码还很糟糕。。。
不过也记录一下,或许以后还是用得上。
殷人昆数据结构 5.37 题
代码:
#include <iostream>
using namespace std;
#define ADD 5
struct treeNode
{
char val;
treeNode * son, * next;
};
bool isLetter(char a)
{
return ( ( a >= 'a' && a <= 'z' ) || ( a >= 'A' && a <= 'Z' ) );
}
void buildTree(treeNode * root, char array[], int & id, int len)
{
id++;
if( id >= len || array[id] == ',' || array[id] == ')' ) {
root->son = NULL; return;
}
treeNode * last = NULL;
treeNode * newNode;
while(id < len && array[id] != ')')
{
if( isLetter(array[id]) ) {
newNode = new treeNode;
newNode->val = array[id];
newNode->next = NULL;
if( last == NULL )
root->son = newNode;
else last->next = newNode;
last = newNode;
buildTree(newNode, array, id, len);
}
else id++;
}
id++;
}
void convert(treeNode * root, int len)
{
if( root == NULL ) return;
for( int i = 1; i <= len; i++) cout << " ";
cout << root->val << endl;
convert(root->son, len + ADD);
convert(root->next, len);
}
int main()
{
char tree[] = "A(B(C,D),E(F(G,H),I,J),K)";
int id;
treeNode * root = new treeNode;
root->val = tree[0];
root->next = NULL;
id = 0;
buildTree(root, tree, id, strlen(tree));
convert(root, 0);
return 0;
}