LeetCode 116.填充每个节点的下一个右侧节点指针

题目描述链接: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;
    }
};
原文地址:https://www.cnblogs.com/zzw-/p/14231956.html