我想這道題時,一直想不到該怎麼樣使從下一層返回上一層時,上一層數不變,因爲我想在遍歷裏面定義一個變量,怎麼也行不通,看了書上是又多傳進來一個參數,這個問題就迎刃而解了。
#include <stdio.h>
#include <malloc.h>
typedef struct biTNode
{
char data;
struct biTNode *lChild, *rChild;
}biTNode, *biTree;
void preOrderTraverse(biTree T, int level)
{
if(T)
{
if(T->data == 'D')
{
printf("D 在第%d層.\n", level);
return;
}
preOrderTraverse(T->lChild, level + 1);
preOrderTraverse(T->rChild, level + 1);
}
}
void createBiTree(biTree *T)
{
char c;
scanf("%c", &c);
if(c == ' ') *T = NULL;
else
{
*T = (biTree)malloc(sizeof(biTNode));
if(!(*T)) return;
(*T)->data = c;
createBiTree(&((*T)->lChild));
createBiTree(&((*T)->rChild));
}
}
void main()
{
int level = 1;
biTree binaryTree;
printf("請輸入二叉樹:\n");
createBiTree(&binaryTree);
preOrderTraverse(binaryTree, level);
}
運行結果如下: