C/C++ 递归算法,在二叉树中求位于先序序列中第k个位置的结点

基本的代码

前期准备(创建二叉树)

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';
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值