广义表建树

来源:互联网 发布:赵泓霖免费网络公开课 编辑:程序博客网 时间:2024/05/16 09:19

简单的广义表建树,但是却纠结了几个小时,总之是太囧了。。。代码还很糟糕。。。

不过也记录一下,或许以后还是用得上。

殷人昆数据结构 5.37 题

代码:

#include <iostream>using namespace std;#define ADD 5struct 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;}


原创粉丝点击