基本的代码
前期准备(创建二叉树)
status creatTree(BiTree& T)
{
TElemType m;
scanf_s("%c", &m);
if (m == ' ')//若输入的为空格则表示该结点为空
{
T = NULL;
return ERROR;
}
else
{
T = (BiTree)malloc(sizeof(BiTNode));//开辟空间
T->data = m;//赋值
creatTree(T->lchild);//创建左节点
creatTree(T->rchild);//创建右节点
return OK;
};
}
方法的实现(求位于先序序列中第k个位置的结点)
TElemType searchTree(BiTree T, int &n)//n要用引用
{
if (T)//判断结点是否为空
{
if (n == 1) return T->data;//记录该结点是否是要找的结点
n--;//不是n--
char p = searchTree(T->lchild, n);//查找改结点的左孩子
if(p!='0')
return p;//如果找到了要找的值则返回
char q = searchTree(T->rchild, n);//查找改结点的右孩子
if (q != '0')
return q;//如果找到了要找的值则返回
}
return 0;
}
全部代码
主函数
#include"标头.h"
using namespace std;
int main()
{
int number;
BiTree T;
creatTree(T);
cin >> number;
cout<<searchTree(T, number)<<endl;
return 0;
}
头文件
#pragma once
#include<iostream>
#define OK 1;
#define ERROR 0;
typedef int status;
typedef char TElemType;
typedef struct BiTNode
{
TElemType data;
struct BiTNode* lchild, * rchild;//左孩子与右孩子
}BiTNode,*BiTree;
int creatTree(BiTree& T);//创建二叉树
TElemType searchTree(BiTree T, int &n);//搜索先序排列的第n位置的结点
函数的定义
#include"标头.h"
using namespace std;
status creatTree(BiTree& T)
{
TElemType m;
scanf_s("%c", &m);
if (m == ' ')//若输入的为空格则表示该结点为空
{
T = NULL;
return ERROR;
}
else
{
T = (BiTree)malloc(sizeof(BiTNode));//开辟空间
T->data = m;//赋值
creatTree(T->lchild);//创建左节点
creatTree(T->rchild);//创建右节点
return OK;
};
}
TElemType searchTree(BiTree T, int &n)//n要用引用
{
if (T)//判断结点是否为空
{
if (n == 1) return T->data;//记录该结点是否是要找的结点
n--;//不是n--
char p = searchTree(T->lchild, n);//查找改结点的左孩子
if(p!='0')
return p;//如果找到了要找的值则返回
char q = searchTree(T->rchild, n);//查找改结点的右孩子
if (q != '0')
return q;//如果找到了要找的值则返回
}
return '0';
}