【5 树与二叉树】先序遍历输出第k个元素。

void findk(BiTree T,int k,int &value){		//递归判断 
	if(T!=null){							//非空才执行 
		k--;								//每次k--代表又遍历一个元素
		if(k==0)							//直到k为0,则遍历到第k个元素 
			value=T->data;
		else{
			findk(T->lchild,k,value);		//DLR中间找完找左子树,再右子树 
			findk(T->rchild,k,value);
		}
	}
} 
void findk(BiTree T,int k,int &value){		//先序遍历非递归 
	InitStack(S);							//用栈 
	BiTNode *p=T;
	int count=0;
	while(p||!IsEmpty(S)){					//每次遍历计数器都加1,直到=k则输出值 
		if(p){								//左子树全进栈 
			count++;
			if(count==k)
				value=p->data;
			Push(S,p);
			p=p->lchild;
		}
		else{								//左子树结束,出栈顶,指向栈顶右子树 
			Pop(S,p);
			p=p->rchild; 
		}
	}
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

irel1a_3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值