leetcode_116题——Populating Next Right Pointers in Each Node(树,广度优先搜索)

Populating Next Right Pointers in Each Node

Total Accepted: 49664 Total Submissions: 137310My Submissions

Question Solution

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

Show Tags

Have you met this question in a real interview?

Yes

No

Discuss

这道题我采用的是广度优先搜索,采用队列来做,同时记下每一行的结点个数

#include<iostream>
#include<queue>
using namespace std;

//Definition for binary tree with next pointer.
struct TreeLinkNode {
		 int val;
		 TreeLinkNode *left, *right, *next;
		 TreeLinkNode(int x) : val(x), left(NULL), right(NULL), next(NULL) {}
		};

void connect(TreeLinkNode *root) {
	queue<TreeLinkNode*> temp_queue;
	if(root==NULL)
		return;
	temp_queue.push(root);
	int row_size=1;
	while(!temp_queue.empty())
	{
		TreeLinkNode *p1=NULL;
		TreeLinkNode *p2=NULL;
		while(row_size>0)
		{
			if(row_size==1)
			{
				p1=temp_queue.front();
				temp_queue.pop();
				p1->next=NULL;
			}
			else
			{
				p1=temp_queue.front();
				temp_queue.pop();
				p2=temp_queue.front();
				p1->next=p2;
			}
			row_size--;
			if(p1->left!=NULL)
				temp_queue.push(p1->left);
			if(p1->right!=NULL)
				temp_queue.push(p1->right);
		}
		row_size=temp_queue.size();
	}
}
int main()
{
	TreeLinkNode* root=(TreeLinkNode*)malloc(sizeof(TreeLinkNode));
	root->val=1;
	root->next=NULL;
	root->left=(TreeLinkNode*)malloc(sizeof(TreeLinkNode));
	root->right=(TreeLinkNode*)malloc(sizeof(TreeLinkNode));
	root->left->val=2;
	root->right->val=3;
	root->left->next=NULL;
	root->right->next=NULL;
	connect(root);
}

  

时间: 2024-08-06 17:39:52

leetcode_116题——Populating Next Right Pointers in Each Node(树,广度优先搜索)的相关文章

leetcode 刷题之路 81 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, al

【leetcode刷题笔记】Populating Next Right Pointers in Each Node II

What if the given tree could be any binary tree? Would your previous solution still work? Note: You may only use constant extra space. For example,Given the following binary tree, 1 / 2 3 / \ 4 5 7 After calling your function, the tree should look li

LeetCode开心刷题五十五天——117. Populating Next Right Pointers in Each Node II

问题亟待解决: 1.一个问题一直困扰着我,想看下别人是怎么处理树的输入的,最好是以层级遍历这种清楚直观的方式. 2.关于指针*的使用 因此也导致代码不完整,没有主函数对Solution类的调用 117. Populating Next Right Pointers in Each Node II Medium 1161165FavoriteShare Given a binary tree struct Node { int val; Node *left; Node *right; Node

Populating Next Right Pointers in Each Node II

Follow up for problem "Populating Next Right Pointers in Each Node". What if the given tree could be any binary tree? Would your previous solution still work? Note: You may only use constant extra space. For example, Given the following binary t

Leetcode 116. Populating next right pointers in each node I and II

题目1: 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. Initiall

[leetcode]Populating Next Right Pointers in Each Node @ Python

原题地址:https://oj.leetcode.com/problems/populating-next-right-pointers-in-each-node/ 题意: 1 / 2 3 / \ / 4 5 6 7变为: 1 -> NULL / 2 -> 3 -> NULL / \ / 4->5->6->7 -> NULL 解题思路:看到二叉树我们就想到需要使用递归的思路了.直接贴代码吧,思路不难. 代码: # Definition for a binary t

leetcode - Populating Next Right Pointers in Each Node I&amp;II

Populating Next Right Pointers in Each Node I 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 nex

LeetCode: Populating Next Right Pointers in Each Node 解题报告

Populating Next Right Pointers in Each Node TotalGiven 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

LeetCode——Populating Next Right Pointers in Each Node II

Follow up for problem "Populating Next Right Pointers in Each Node". What if the given tree could be any binary tree? Would your previous solution still work? Note: You may only use constant extra space. For example, Given the following binary t