Re: [問題] 印出鋸齒狀的二元樹
看板C_and_CPP (C/C++)作者freeinmind (黑黑的天空出現綠光)時間16年前 (2009/12/03 10:51)推噓3(3推 0噓 5→)留言8則, 6人參與討論串3/3 (看更多)
※ 引述《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
→
12/03 10:55, , 1F
12/03 10:55, 1F
→
12/03 10:55, , 2F
12/03 10:55, 2F
→
12/03 10:56, , 3F
12/03 10:56, 3F
推
12/03 12:05, , 4F
12/03 12:05, 4F
→
12/03 15:20, , 5F
12/03 15:20, 5F
推
12/03 23:06, , 6F
12/03 23:06, 6F
→
12/03 23:07, , 7F
12/03 23:07, 7F
推
12/04 01:52, , 8F
12/04 01:52, 8F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章