描述
继续思考"填充每个节点指向最右节点的next指针" 这道题
如果给定的树可以是任意的二叉树呢?你之前的给出的算法还有效吗?
注意:
- 你只能使用常量的额外内存空间
例如:
给出的二叉树如下:
调用完你给出的函数之后,这棵树应该变成:
class Solution {
public:
void connect(TreeLinkNode *root) {
if(root == NULL)
return;
//层次遍历
queue<TreeLinkNode*> q;
q.push(root);
TreeLinkNode* curNode = NULL;
TreeLinkNode* nextNode = NULL;
while(! q.empty()){
//和一般的层次遍历略有不同,每次while要把当前层的节点全部弹出去
int len = q.size();
curNode = q.front();
q.pop();
if(curNode->left != NULL)
q.push(curNode->left);
if(curNode->right != NULL)
q.push(curNode->right);
for(int i = 1;i<len;++i){
nextNode = q.front();
q.pop();
curNode->next = nextNode;
curNode = nextNode;
if(curNode->left != NULL)
q.push(curNode->left);
if(curNode->right != NULL)
q.push(curNode->right);
}
curNode->next = NULL;
}
}
};