jianingkid 2013-12-07 11:32 采纳率: 0%
浏览 970

kd树插入问题,程序没有问题,但是运行无法达到理想!达人速进啊!

程序运行没有问题,但是当插入2 3,4 5,6 1数据时就发生6 1插入失败,想问问我哪里错了?
这是结构体typedef struct kd
{
int a[2];
int deep;
int h,left,right;
kd *leftchild;
kd *rightchild;
}kdt;
这是主程序

// kd.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
void inittree(kdt **R)
{
*R=(kdt *)malloc(sizeof(kdt));
(*R)->leftchild=NULL;
(*R)->rightchild=NULL;
(*R)->deep=0;
(*R)->h=0;
(*R)->left=0;
(*R)->right=0;
}

insert(kdt *q,kdt *T)
{
/*for(int i=0;i<2;i++)
{

        printf("%d ",q->a[i]);
    }*/

kdt *p;

p=T;

if(p->h==0)
{
    for(int i=0;i<2;i++)
    {
        p->a[i]=q->a[i];
        //printf("%d ",p->a[i]);

    }
    p->h=1;
    printf("插入根节点成功\n");

return 1;
}

int i=T->deep%2;

if(T->a[i]>q->a[i])//左
{
q->deep++;
printf("l插%d入%d成%d功%d\n",T->left,T->deep,T->a[i],i);
if(T->left)
insert(q,T->leftchild);
else
{
T->left=1;
T->leftchild=q;
return 1;
}
}

        else//右
        {
            q->deep++;
            printf("r插%d入%d成%d功%d\n",T->right,T->deep,T->a[i],i);
            if(T->right)
                insert(q,T->rightchild);
            else 
            {
                T->right=1;
                T->rightchild=q;
                return 1;
            }
        }

return 0;
}

int main(int argc, char* argv[])
{
int k;
kdt *root,*q,*T;
inittree(&root);

inittree(&T);
T=root;

//  printf("%d",q->deep);
inittree(&q);

printf("请输入结点坐标:");
for(int i=0;i {
scanf("%d",&q->a[i]);
}

            q->deep=0;
            q->h=1;

            i=insert(q,T);
            if(i)printf("插入成功");
            else printf("插入失败");

return 0;

}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 用visual studi code完成html页面
    • ¥15 聚类分析或者python进行数据分析
    • ¥15 逻辑谓词和消解原理的运用
    • ¥15 三菱伺服电机按启动按钮有使能但不动作
    • ¥15 js,页面2返回页面1时定位进入的设备
    • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
    • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
    • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
    • ¥20 腾讯企业邮箱邮件可以恢复么
    • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?