我想这道题时,一直想不到该怎么样使从下一层返回上一层时,上一层数不变,因为我想在遍历里面定义一个变量,怎么也行不通,看了书上是又多传进来一个参数,这个问题就迎刃而解了。
#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);
}
运行结果如下: