这题目一开始我就是想层序遍历把节点都放进一个队列里然后再操作,可是稍微有点难控制。看了下题解感觉很妙啊,所以记录一下喽。
struct Node* connect(struct Node* root) { if(root==NULL) { return NULL; } struct Node *tree[10000];//创建一个大点的,不然不能通过测试 int front=0,rear=0;//创建队列 tree[rear++]=root; while(front<rear)//控制迭代次数 { int size=rear-front;//记录每层的节点个数 for(int i=0;i<size;i++) { struct Node *work=tree[front++];//将所操作的节点提出来,后移的过程中下一个可能是空的也可能有节点 if(i<size-1) { work->next=tree[front];//这里next中可能是空的也可能有节点 } if(work->left!=NULL)//将孩子节点入队 { tree[rear++]=work->left; } if(work->right!=NULL) { tree[rear++]=work->right; } } } return root; }