Re: [問題] 印出鋸齒狀的二元樹

看板C_and_CPP (C/C++)作者 (黑黑的天空出現綠光)時間16年前 (2009/12/03 10:51), 編輯推噓3(305)
留言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
.... 開個 debugger trace 一下到什麼地方當掉吧
12/03 10:55, 1F

12/03 10:55, , 2F
這裡不是免費人肉debugger 好不好?
12/03 10:55, 2F

12/03 10:56, , 3F
不好意思 前面讀檔都沒問題 就是到要印出BST就當掉
12/03 10:56, 3F

12/03 12:05, , 4F
不用debugger就用printf不斷測試跟想哪裡指標會亂指吧
12/03 12:05, 4F

12/03 15:20, , 5F
人肉DEBUGGER很貴
12/03 15:20, 5F

12/03 23:06, , 6F
就算你想找人肉 debugger, 也用置底的方式貼 code
12/03 23:06, 6F

12/03 23:07, , 7F
直接放在板上, 要 copy 也麻煩, 想幫你忙的機率約等於零 XD
12/03 23:07, 7F

12/04 01:52, , 8F
不能同意樓上更多....
12/04 01:52, 8F
文章代碼(AID): #1B5oUzZ3 (C_and_CPP)
文章代碼(AID): #1B5oUzZ3 (C_and_CPP)