编写递归算法,在二叉树中求位于先序序列中第k个位置的结点的值。
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <malloc.h>
using namespace std;
typedef struct tnode
{
int data;
struct tnode *lchild,*rchild;
}tnode,*bitree;
int creattree(bitree &bt)
{
char ch;
scanf("%c",&ch);
getchar();
if(ch=='#')bt=NULL;
else
{
bt=(tnode *)malloc(sizeof(tnode));
bt->data=ch;
printf("输入%c的左子节点:", ch);
creattree(bt->lchild);
printf("输入%c的右子节点:", ch);
creattree(bt->rchild);
}
return 1;
}
int presearch(int k,bitree &bt,int &num)
{
int ans;
if(bt)
{
num++;
if(num==k)ans=bt->data;
else
{
presearch(k,bt->lchild,num);
presearch(k,bt->rchild,num);
}
}
return ans;
}
int main()
{
bitree bt;
bt=(tnode *)malloc(sizeof(tnode));
int K,e=0;
printf("输入根节点:");
creattree(bt);
printf("输入K:");
scanf("%d",&K);
printf("%d\n",presearch(K,bt,e));
return 0;
}