qq_40594061 2018-01-03 11:05 采纳率: 66.7%
浏览 808
已结题

为什么用了new之后root还是NULL啊

//new在类的insert函数里
//后面那两行就是用来验证的
#include
using namespace std;

struct mnode
{
int point[4];
mnode** p;
int num;

mnode()
{
    p == new mnode*[5];
    for(int i = 0; i < 5; i++)
        p[i] = NULL;
    for(int i = 0; i < 4; i++)
        point[i] = -1;
    num = 0;
};

mnode(int x)
{
    p == new mnode*[5];
    for(int i = 0; i < 5; i++)
        p[i] = NULL;
    for(int i = 0; i < 4; i++)
        point[i] = -1;
    point[0] = x;
    num = 1;
}

};

class tree
{
public:
tree();
tree(int *, int);
void insert(int);
void erase(int);
bool find(int);
void show();

private:
    mnode* root;
    int* initial;
    mnode* search;
    int size;

};

tree::tree()
{
root = NULL;
search = NULL;
initial = NULL;
}

tree::tree(int *a, int n)
{
root = NULL;
size = 0;
initial = a;
for(int i = 0; i < n; i++)
{
search = root;
if(search == NULL)
cout << i << endl;
insert(initial[i]);
}
size = n;
}

void tree::insert(int x)
{
// if(root == NULL)
// {//空,就直接申一个;
// root == new mnode(x);
// size++;
// return;
// }
//

if(search == NULL)
{//空,就直接申一个;
if(search == root)
root == new mnode(x);
else

search == new mnode(x);
if(root == NULL&& search ==NULL)
cout << "xxxx";
size++;
return;
}

int num = search->num;
//只要还不满,就先考虑将其放在该层次中 
if(num != 4)
{
    int i;
    for(i = 0; i < num; i++)
    {
        if(x < search->point[i])
            break;
    }//可得应该将x插在哪一个空位中 

    for(int k = num - 1;k > i; k--)
    {
        search->point[k] = search->point[k - 1];
    } 
    search->point[i] = x;
    size++;
    return ;
}

int i = 0;
while(1)
{
    if(search->point[i] > x)
        break;
    i++;
    if(i == num)
        break;
}//x应该插在i与i-1之间,即p[i]中 
//找出应该插入那两个之间

search = search->p[i];
insert(x);
return ;

}

int main()
{

int arr[9] = {2, 5, 4, 7, 0, 32, 14, 33, 25};

// mnode *n = new mnode(10);
//

// cout << "num : " << n->num << endl;
// cout << "array : ";
// for(int i = 0; i < 4; i ++)
// {
// cout << n->point[i] << " ";
// }
// cout << endl;
// for(int i = 0; i < 5; i ++)
// {
// if(n->p[i] == NULL)
// cout << i << ":empty ";
// }
// cout << endl;
//

//

tree T(arr, 9);

return 0;

}

  • 写回答

3条回答 默认 最新

  • alittlebirdsd 2018-01-03 11:25
    关注

    你代码中是在search为空的前提下,再判断root为空就new。是不是这个原因?

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。