寻找先序遍历的第K个值(21.6.15)

题目描述:

假设二叉树采用链式存储,设计一个算法,求先序遍历中第k个结点的值。

算法思想:

设置一个全局变量i,初值等于根结点在先序遍历中的序号,即i=1。当二叉树b为空时返回特殊的字符‘#’,当i=k时,表示找到了满足条件的结点,返回b->data。当i不等于k时,递归地在左子树继续查找,找到返回其值,否则就在右子树中递归寻找,并返回其结果。

(ps:求其他遍历序列的第k个结点也是用类似的方法,只不过查找的顺序有所差异而已。)

代码如下:

int i=1;
ElemType PreNode(BiTree b,int k){
	if(b==NULL) return '#';
	if(i==k) return b->data;
	i++;
	temp=PreNode(b->lchild,k);  //左子树递归查找 
	if(temp!='#') return temp;  //在左子树中,则返回该值 
	temp=PreNode(b->rchild,k); //在右子树中递归查找 
	return temp; 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值