c语言二叉树问题求解~

2025-12-25 03:35:51
推荐回答(1个)
回答1:

#include "stdio.h"
int position(int,int);
int main(int argc, char const *argv[])
{
        int p,q,pos,times;
        printf("请输入数组的组数:");
        scanf("%d",×);
        while(times > 0)
        {
                printf("请输入p,q:");
                scanf("%d %d",&p,&q);
                pos = position(p,q);
                printf("%d \n", pos);
                times--;
        }
        return 0;
}
int  position(int p,int q)
{
        //printf("%d %d\n",p,q);//这个可以看到过程
        if(p == q) return 1;
        if(p > q)//右子树
        {
                return 2*position(p-q,q)+1;
        }else//左子树
        {
                return 2*position(p,q-p);
        }
}
//在主函数中调用position,可以得到相应地位置,简单的验证过,应该是正确的
//这个基本上涉及到了二叉查找树,子节点和父节点索引的关系: 2N,2N+1 
//基本算法就是这样了,至于按你的要求输入多组数据,可以自己做了