核心就是用二级指针操作指针,现有一个一级指针TreeLinkNode *p1;
二级指针 TreeLinkNode **p2=&p1;
什么意思呢,就是一级指针取地址后传递给二级指针让他保存我的地址,不要多想,就是这么简单。
好,现在呢单p2这两个字母,就是一个二级指针了。那么p1==*p2懂了吧,(p2用*取出对应地址里面的东西),也有
(实际里边放置的玩意儿)==*p1==**p2
看到这里你会说,我费力整出个二级指针干嘛,一级指针不就能访问内存了吗。但是,朋友,你想啊,函数传参的时候(除引用、赋值),是不是只是一个指针复制给另一个指针它里面的玩意儿(地址)然后他自己就跑了,你想操作他本身时他早就溜了。所以呢,为了操作它本身,我们需要提取出指针本身的地址,即二级指针。从而来改变整个树的结构
废话这么多,二级指针了解了吧,上代码:
class Solution {
public:
void connect(TreeLinkNode *root) {
if(root==NULL)
return;
//用二级指针来操作指针
queue<TreeLinkNode **>q;
q.push(&root);
while(!q.empty())
{
queue<TreeLinkNode **>qt;
while(!q.empty())
{
TreeLinkNode **temp=q.front();
if((*temp)->left)
qt.push(&((*temp)->left));
if((*temp)->right)
qt.push(&((*temp)->right));
q.pop();
if(q.empty())
(*temp)->next=NULL;
else
(*temp)->next=*q.front();
}
q=qt;
}
}
};