简单的广义表建树,但是却纠结了几个小时,总之是太囧了。。。代码还很糟糕。。。
不过也记录一下,或许以后还是用得上。
殷人昆数据结构 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; }