思路:待查节点的存在性:
当二叉树为空树,或者k非法时,待查节点不存在!
函数应返回待查结点是否存在的状态指示;TRUE和FALSE
当待查找的结点存在时,需进一步返回该结点的数值
问题1:该算法需要返回多个值,如何处理?
答:一种做法是用返回值返回存在性,用变参返回值。
问题2:该算法可以基于二叉树的先序遍历的递归算法来构造,如何知道当前访问的节点是先序序列中的第几个结点呢?
答:引入计数器呗!对于该计数器可以采用全局变量来存储,也可以通过变参来处理。
//----------------------------位于二叉树先序序列中第k个位置的节点的值---------------------------------------------------//
bool PreorderKnode(BiTree T,int k,char &e,int &count)
{ //输入:T为二叉链表是的二叉树,k为待查找的结点在先序序列中的位序
//输出:TRUE:待查找的结点存在;False:待查找的结点不存在
// e--当待查结点存在时,该节点的值通过e带回
// 中间变量:count——记录当前已经访问过的结点个数
if(!T) return false;
count++; //访问结点--->对已访问的结点进行计数
if(count == k) //判断该节点是否是待查找的结点
{
e = T->data;
return true; //查到,则设置e,并返回true
}
else if(count > k)
{
return false; //计数器count已经超出k(当k<0时),则直接返回False
}
else
{
if(PreorderKnode(T->lchild,k,e,count) == false) //在左子树中查找
{
return PreorderKnode(T->rchild,k,e,count); //在右子树中查找
}
return true;
}
}