关于++top引起的问题
查看原帖
关于++top引起的问题
586915
zdz10124楼主2024/9/7 21:37

先简单说一下这个代码是干啥的

这是插入一个数时,如果发现当前位置有数,且插入的数大于当前数,小于当前位置右孩子的数,就在这里新建一个节点,让当前节点成为新的右孩子,且让它的右孩子为原来树的右孩子。

源代码

		if(vis[tr[p].rc] && x<a[tr[p].rc])
		{
			int nw=top+1;
			vis[nw]=1;
			printf("我赋值了哦,右子树为%d\n",tr[p].rc);
			tr[nw].__init__(p,top+2,tr[p].rc,tr[tr[p].rc].sz+1);
			top+=2;
			printf("在验证一下%d\n",tr[nw].rc);
			tr[tr[p].rc].fa=nw;
			tr[p].rc=nw;
			a[nw]=x;
			return;
		}

修改后(将++top改掉了)

		if(vis[tr[p].rc] && x<a[tr[p].rc])
		{
			int nw=top+1;
			vis[nw]=1;
			printf("我赋值了哦,右子树为%d\n",tr[p].rc);
			tr[nw].__init__(p,top+2,tr[p].rc,tr[tr[p].rc].sz+1);
			top+=2;
			printf("在验证一下%d\n",tr[nw].rc);
			tr[tr[p].rc].fa=nw;
			tr[p].rc=nw;
			a[nw]=x;
			return;
		}

问题: 自己的输入: 5

1 3

1 2

1 5

1 4

1 1

结果经过测试发现4的右孩子下表被吃了,右孩子下标记录为“0”

然后将++top改掉后就正常了,请问是什么原理?

2024/9/7 21:37
加载中...