数据结构-二叉树-求位于二叉树先序序列中第k个位置的结点的值

思路:待查节点的存在性:

                当二叉树为空树,或者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;
    }
}

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

.一夜知秋.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值