题目描述链接:here
题目解读:在一棵完美二叉树上,让其每一层的节点(除最右侧节点外)指向其同一层的右侧节点。这里的完美二叉树实际上就是满二叉树。
解题思路:由于给出的树为满二叉树,那么就可以利用满二叉树的性质来很好地解决此题。由于需要对二叉树进行层次遍历,那么就可以使用队列,对于满二叉树每层节点的个数为pow(2,d-1),d为深度。由此该题的解题思路就产生了。使用队列进行层次遍历,由于每层节点的个数确定,即可以使得每层的节点(除去最右侧节点)指向其右侧节点。
解题代码:
class Solution { public: Node* connect(Node* root) { if(!root){ return root; } Node *p=root; int depth=0; while(p){ p=p->left; depth+=1; } queue<Node*> q; q.push(root); int d=1; int i; Node *temp; while(!q.empty()){ i=1; while(i<pow(2,d-1)){ temp=q.front(); if(temp->left){ q.push(temp->left); } if(temp->right){ q.push(temp->right); } q.pop(); temp->next=q.front(); i++; } if(q.front()->left){ q.push(q.front()->left); } if(q.front()->right){ q.push(q.front()->right); } q.pop(); d++; } return root; } };