#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
struct node
{
int data=0;
node* left=NULL;
node* right=NULL;
};
void preOrder(node *p)//先序递归
{
if(p!=NULL)
{
printf("%d\n",p->data);
preOrder(p->left);
preOrder(p->right);
}
}
void leftRotate(node* &p)//左旋
{
node* left=p->left;
node* right=p->right;
p->right=right->left;
right->left=p;
p=right;
printf("左旋之后地址变为===%p\n",p);
}
void func1(node* &p,node* t)
{
// node* &test=t;
// printf("作为参考的地址=====%p\n",p);
printf("传入左旋操作的地址=%p\n",p);
leftRotate(p);
}
int main()
{
node* t1=(node*)malloc(sizeof(node));
node* t2=(node*)malloc(sizeof(node));
node* t3=(node*)malloc(sizeof(node));
t1->data=111;
t2->data=222;
t3->data=333;
t1->right=t2;
t2->right=t3;
printf("操作之前先序输出\n");
preOrder(t1);
printf("操作之前t1地址=====%p\n",t1);
func1(t1,t1);
printf("操作之后t1地址变为=%p\n",t1);
printf("操作之后先序输出\n");
preOrder(t1);
return 0;
}
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
struct node
{
int data=0;
node* left=NULL;
node* right=NULL;
};
void preOrder(node *p)//先序递归
{
if(p!=NULL)
{
printf("%d\n",p->data);
preOrder(p->left);
preOrder(p->right);
}
}
void leftRotate(node* &p)//左旋
{
node* left=p->left;
node* right=p->right;
p->right=right->left;
right->left=p;
p=right;
printf("左旋之后地址变为===%p\n",p);
}
void func1(node* &p,node* t)
{
node* &test=t;
printf("作为参考的地址=====%p\n",p);
printf("传入左旋操作的地址=%p\n",test);
leftRotate(test);
}
int main()
{
node* t1=(node*)malloc(sizeof(node));
node* t2=(node*)malloc(sizeof(node));
node* t3=(node*)malloc(sizeof(node));
t1->data=111;
t2->data=222;
t3->data=333;
t1->right=t2;
t2->right=t3;
printf("操作之前先序输出\n");
preOrder(t1);
printf("操作之前t1地址=====%p\n",t1);
func1(t1,t1);
printf("操作之后t1地址变为=%p\n",t1);
printf("操作之后先序输出\n");
preOrder(t1);
return 0;
}
我好像想明白了,灵感来源我之前的一篇文章,giao,没想到起作用了。
void fun(node* &p)
这里的p可以修改t1的地址,也可以修改t1里面的属性。p=p->right;p->data=p->right->data;都是可以生效的
void fun(node* t)
这里的t无法修改t1的地址,但可以修改其中的属性,只有t->data=t->right->data;才能生效。所以使用t=t->right去寻找其他结点不会对原数据有影响
这,是不是意味着我的问题似乎无解。?
获取树上另外一点可以使用node* t,但无法直接修改地址,如果真要完成左旋操作,只能将属性一个一个赋值过来再做相应修改。
而使用node* &p却无法获得另外一点。
确实,尝试node* &test=t从而使用test修改t1是无效的。只能一个一个赋值了
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。
因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。