leetcode_116번 - Populating Next Right Pointers in Each Node(트리, 폭 우선 검색)

3032 단어 LeetCode

Populating Next Right Pointers in Each Node

 
Total Accepted: 49664 Total Submissions: 137310 My 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);
    
    }
    
    

      
     

    좋은 웹페이지 즐겨찾기