Leetcode 117.填充每个节点的下一个右侧节点指针 II

题目

题目链接
在这里插入图片描述在这里插入图片描述

分析题目

分析题目可知,这道题目用到的数据结构为二叉树,并且需要对二叉树中的每个点进行处理。

因此可以想到需要遍历整棵树。

问题就转变为应该采用什么遍历方法。

因为结果只与右侧节点有关,所以应该采用层序遍历较为简单。

经过以上分析可知这道题用到的算法是:广度优先遍历。

代码

class Solution {
public:
    Node* connect(Node* root) {
        //广度优先遍历
        queue<Node*> quene;
        //注意这里不要忘记考虑空指针的情况
        if(!root)return NULL;
        quene.push(root);
        Node* now = NULL;
        Node* pre = NULL;
        while (!quene.empty()){
            int size = quene.size();
            pre = NULL;
            for(int i=0;i<size;i++)
            {
                now = quene.front();
                quene.pop();
                now->next=pre;
                pre = now;
                //因为将pre初始化为NULL,所以应该从右侧开始遍历
                //从左侧开始遍历的话,会为得知右侧的值带来困难
                //当从某个方向遍历得到结果比较困难时,可以试一试从反方向进行遍历
                if(now->right)quene.push(now->right);
                if(now->left)quene.push(now->left);
            }
        }
        return root;
    }
};

复习BFS算法

void bfs(Node* node) {
    if (node == nullptr) return;
    queue<Node*> q;
    q.push(node);
    node->visited = true;
    while (!q.empty()) {
        Node* curr = q.front();
        q.pop();
        cout << curr->value << " ";
        
        for (auto neighbor : curr->neighbors) {
            if (!neighbor->visited) {
                neighbor->visited = true;
                q.push(neighbor);
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值