LeetCode116—Populating Next Right Pointers in Each Node

LeetCode116—Populating Next Right Pointers in Each Node

原题

Given a binary tree

struct TreeLinkNode {
  TreeLinkNode *left;
  TreeLinkNode *right;
  TreeLinkNode *next;
}

Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set to NULL.

Initially, all next pointers are set to NULL.

Note:

You may only use constant extra space.
You may assume that it is a perfect binary tree (ie, all leaves are at the same level, and every parent has two children).
For example,
Given the following perfect binary tree,
         1
        /  \
       2    3
      /   \  /   \
     4    5 6    7
After calling your function, the tree should look like:
       1 -> NULL
      /    \
     2  ->   3 -> NULL
    /  \    /   \
   4 ->5 ->6 -> 7 -> NULL

分析

就是把完全二叉树的连起来,因为题目数据结构中给了next指针,按照示例输出不难得出就是把完全二叉树从左到右“串”起来,最后一个节点指向NULL。

题目的Hint的给的提示深度优先搜索(我还没想到dfs的解法),但是这题用层序遍历(BFS)会比较简单,包括下一题LeetCode117—Populating Next Right Pointers in Each Node II 针对非完全二叉树的情形,也可以用相同的方法,事实上两者我用的同一份代码。

class Solution {
private:
    void bfs(TreeLinkNode *root)//层序遍历
    {
        if (root == NULL)
            return;
        vector<TreeLinkNode*>temp;
        vector<TreeLinkNode*>q;
        int front = 0;
        int rear = 1;
        q.push_back(root);
        while (front < q.size())
        {
            rear = q.size();
            while (front < rear)
            {
                temp.push_back(q[front]);
                if (q[front]->left != NULL)
                    q.push_back(q[front]->left);
                if (q[front]->right != NULL)
                    q.push_back(q[front]->right);
                ++front;
            }
            int i;
            for ( i = 0; i < temp.size()-1; i++)
            {
                temp[i]->next = temp[i + 1];
            }
            temp[i]->next = NULL;
            temp.clear();//结束一层
        }
    }
public:
    void connect(TreeLinkNode *root) {
        bfs(root);
    }
};
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用\[1\]、\[2\]和\[3\]的代码,这是一个解决LeetCode 116题的Python代码。这个问题是关于填充每个节点的下一个右侧节点指针,使其指向其右侧节点的题目。代码中定义了一个Node类,其中包含了节点的值、左子节点、右子节点和下一个右侧节点指针。代码中的Solution类包含了一个connect方法,用于连接每个节点的下一个右侧节点指针。具体的实现方式有几种不同的方法,包括使用队列层序遍历、递归和带记忆的前序遍历。你可以根据自己的喜好选择其中一种方法来解决这个问题。 #### 引用[.reference_title] - *1* [【LeetCode116. Populating Next Right Pointers in Each Node 解题报告(Python)](https://blog.csdn.net/L141210113/article/details/107134602)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【LeetCode116. 填充每个节点的下一个右侧节点指针 Populating Next Right Pointers in Each Node 解题...](https://blog.csdn.net/fuxuemingzhu/article/details/79559645)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [LeetCode116题—填充每个节点的下一个右侧节点指针—Python实现](https://blog.csdn.net/qq_16184125/article/details/117201474)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值