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

  • 链接 : 原题

  • 题意:给定一个二叉树
    结构:
    在这里插入图片描述

    使其每一个节点的next指针都指向其右侧的节点;如果右侧没有节点,就指向NULL。
    如图:

在这里插入图片描述

  • 思路:
    因为是给同一层的节点加上next,所以层序遍历即可。
    使用queue ,对每一层的节点,每次取出两个(如果是最后一个节点就特判,指向NULL),让前一个指向后一个即可。
  • 代码:
class Solution {
    
    
public:
    Node* connect(Node* root) {
    
    
        if(!root) return NULL;
        queue<Node*> q;
        q.push(root);
        while(!q.empty()){
    
    
            int n = q.size();
            for(int i = 0;i < n;i ++){
    
    
                Node* tmp1 = q.front(); q.pop();
                if(i != n-1){
    
    
                    Node* tmp2 = q.front();
                    tmp1->next = tmp2;
                }
                if(tmp1->left)
                    q.push(tmp1->left);
                if(tmp1->right)
                    q.push(tmp1->right);
            }
        }
        return root;
    }
};
  • 遇到的问题:
    1、许多节点指针类的题目不要忘记首先对root进行判定
    if(!root) return NULL;
    2、对每一层的计数,开始时我还想每次push进queue就 num++,但是直接
    n = q.size() 即可。
    3、因为题目初始化的时候 next、left、right都初始化为NULL,所以
    (1)如果 i == n-1 ,不用 tmp1->next = NULL ,这样会报错的。
    (2)如果tmp1->left tmp1-right = NULL,也不能q.push()进去,自己默认为会push空,就不占队列,这样也会报错,所以需要if 判定。
    指针真是好多细节。

Guess you like

Origin blog.csdn.net/qq_39763472/article/details/105820335