算法一
//求先序遍历二叉树第k个节点的算法1
ElemType PreNode(BiTree T,int k){
static int flag = 0;
static ElemType temp;
if(flag == k) return temp;
if(T != NULL){
flag++;
if(flag == k){
temp = T->date;
return temp;
}
PreNode(T->lchild,k);
PreNode(T->rchild,k);
return temp;
}
}
算法二
//求先序遍历二叉树第k个节点的算法2
ElemType PreNode1(BiTree T,int k){
static flag = 1;
ElemType ch;
if(T == NULL) return '#';
if(flag == k) return T->date;
flag++;
ch = PreNode1(T->lchild,k);
if(ch != '#') return ch;
ch = PreNode1(T->rchild,k);
if(ch != '#') return ch;
}
测试环境
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define maxsize 100
#define ElemType char
//二叉树的创建序列
//ab#df###c#e##
//abd##e##cf###
typedef struct BiNode{
ElemType date;
struct BiNode *lchild,*rchild;
}BiNode,*BiTree;
BiNode* CreateBiTree();
void Traverse(BiNode *p);
ElemType PreNode(BiTree T,int k);
ElemType PreNode1(BiTree T,int k);
int main(){
BiTree t = CreateBiTree();
Traverse(t);
printf("\n%c",PreNode1(t,5));
return 0;
}
//求先序遍历二叉树第k个节点的算法2
ElemType PreNode1(BiTree T,int k){
static flag = 1;
ElemType ch;
if(T == NULL) return '#';
if(flag == k) return T->date;
flag++;
ch = PreNode1(T->lchild,k);
if(ch != '#') return ch;
ch = PreNode1(T->rchild,k);
if(ch != '#') return ch;
}
//求先序遍历二叉树第k个节点的算法1
ElemType PreNode(BiTree T,int k){
static int flag = 0;
static ElemType temp;
if(flag == k) return temp;
if(T != NULL){
flag++;
if(flag == k){
temp = T->date;
return temp;
}
PreNode(T->lchild,k);
PreNode(T->rchild,k);
return temp;
}
}
//用递归方法以中序遍历的方式创建二叉树
BiNode* CreateBiTree(){
BiNode *p;
char a;
scanf("%c",&a);
if(a=='#')
p=NULL;
else{
p=(BiNode *)malloc(sizeof(BiNode));
p->date=a;
p->lchild=CreateBiTree();
p->rchild=CreateBiTree();
}
return p;
}
//递归方法中序遍历二叉树
void Traverse(BiNode *p){
if(p==NULL){
return;
}
else{
printf("%c",p->date);
Traverse(p->lchild);
Traverse(p->rchild);
}
return;
}