作者freeinmind (黑黑的天空出现绿光)
站内C_and_CPP
标题Re: [问题] 印出锯齿状的二元树
时间Thu Dec 3 10:51:38 2009
※ 引述《adrianshum (Alien)》之铭言:
: ※ 引述《freeinmind (黑黑的天空出现绿光)》之铭言:
: : 是这样的一般的印出二元树 不管是inorder 或 preorder
: : 我知道要怎麽写
: : 但是我不知道要怎麽印出树状图的二元树
: : 像是 a 的二元数
: : / \
: : b c
: : / \ \
: : d e f
: : 希望印出来是
: : f
: : c
: : a
: : e
: : d
: : 照层数排这样 请教一下
: f
: c
: a
: e
: b
: d
: 这样吧?
: 每层自己是多少层, 不难吧?
: 不就是 (psuedo code)
: printTree(node, level) {
: printTree(node->right, level + 1);
: 印 level 个 space;
: 印自己的值;
: 印 new line;
: printTree(node->left, level + 1);
: }
: 概念上就是这样而已
依照上面的概念
我的程式是现在这样
void padding ( char ch, int n )
{
int i
for ( i = 0; i < n; i++ )
putchar ( ch );
}
void structure ( struct node *root, int level )
{
int i;
if ( root == NULL ) {
padding ( '\t', level );
puts ( "~" );
}
else {
structure ( root->right, level + 1 );
padding ( '\t', level );
printf ( "%d\n", root->info );
structure ( root->left, level + 1 );
}
}
int main ( void )
{
struct node *tree = NULL;
/* ... *
structure ( tree, 0 );
return 0;
}
这是把node传到struture 有没有办法是把BST传到structure
像是
这是我的header
ypedef struct node
{
void* dataPtr;
struct node* left;
struct node* right;
} NODE;
typedef struct
{
int count;
int (*compare) (void* argu1, void* argu2);
NODE* root;
} BST_TREE;
typedef struct nodeTag2
{
char* key;
char* latinName;
char* genus;
char* family;
char* order;
char* animalClass;
}ANIMALS;
先创一个BST 然後把TXT档读进ANIMALS的structure 再用BST_INSERT
把ANIMALS 一个一个读进BST里
最後把BST印出来 当然是像是上面那种锯齿状的BST
有想了一个方法 用ADT来实作
void BST_Traverse (BST_TREE* tree,
void (*process) (void* dataPtr),int level)
{
_traverse (tree->root, process,level);
return;
} // end BST_Traverse
static void _traverse (NODE* root,
void (*process) (void* dataPtr),level)
{
if (root){
_traverse (root->left, process,level+1);
padding ( '\t', level );
process (root->dataPtr,level);
_traverse (root->right, process),level+1);
}
return;
}// _traverse
void padding ( char ch, int n )
{
int i
for ( i = 0; i < n; i++ )
putchar ( ch );
}
void process(void*ptranimal)
{
//local declarations
ANIMALS ani = *(ANIMALS*)ptranimal;
printf("%s %s %s %s %s %s", ani.key,ani.latinName,ani.genus,ani.family,ani.order,ani.animalClass);
return;
}//process
void printTRee(BST_TREE*list)
{
printf("\n animal list:\n");
BST_Traverse(list,process,0);
printf("end of animal list\n");
return;
}
最後compile 可以过 但是有个waring: putchar is undefined
印的结果就直接当掉 囧
有人可以帮我看看吗
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 24.7.54.192
1F:→ adrianshum:.... 开个 debugger trace 一下到什麽地方当掉吧 12/03 10:55
2F:→ adrianshum:这里不是免费人肉debugger 好不好? 12/03 10:55
3F:→ freeinmind:不好意思 前面读档都没问题 就是到要印出BST就当掉 12/03 10:56
4F:推 final01:不用debugger就用printf不断测试跟想哪里指标会乱指吧 12/03 12:05
5F:→ nvidia:人肉DEBUGGER很贵 12/03 15:20
6F:推 ledia:就算你想找人肉 debugger, 也用置底的方式贴 code 12/03 23:06
7F:→ ledia:直接放在板上, 要 copy 也麻烦, 想帮你忙的机率约等於零 XD 12/03 23:07
8F:推 lairrol:不能同意楼上更多.... 12/04 01:52