• 116. Populating Next Right Pointers in Each Node


    欢迎fork and star:Nowcoder-Repository-github

    116. 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即可!
    // Populating Next Right Pointers in Each Node
    class Solution_116 {
    public:
    	//运行时间:8ms
        //占用内存:892k
    	
    	void connect(TreeLinkNode *root) {
    		if (!root)
    		{
    			return;
    		}
    		queue<TreeLinkNode*> que;
    		que.push(root);
    
    		while (!que.empty())
    		{
    			int size = que.size(); //每一层的大小
    
    			TreeLinkNode* cur, *pre=NULL;
    			while (size--)
    			{
    				cur= que.front();
    				que.pop();
    
    				if (pre)
    				{
    					pre->next = cur;		
    				}
    				pre = cur;
    				if (cur->left)
    				{
    					que.push(cur->left);
    				}
    				if (cur->right)
    				{
    					que.push(cur->right);
    				}
    			}
    			cur->next = NULL;
    
    		}
    	}
    
            void connect1(TreeLinkNode *root) {
    		queue<TreeLinkNode*> q;
    		if (!root)
    			return;
    		q.push(root);
    
    		while (!q.empty()) {
    			int size = q.size();
    			for (int i = 0; i < size; i++) {
    				TreeLinkNode* node = q.front();
    				q.pop();
    				if (i == size - 1)
    					node->next = nullptr;
    				else
    					node->next = q.front();//当前节点已经出栈, q.front()为下一节点,避免记录上一次节点
    
    				if (node->left)
    					q.push(node->left);
    				if (node->right)
    					q.push(node->right);
    			}
    		}
    	}
    };
    
    

    题目来源

  • 相关阅读:
    Java 初始化
    tomcat 输入学习
    使用exundelete在Linux下恢复删除的文件
    java设计模式----解释器模式
    java设计模式----中介模式
    java设计模式----访问者模式
    java设计模式----状态模式
    关于前后端分离的一些事
    sublime text3
    java中的socket编程
  • 原文地址:https://www.cnblogs.com/ranjiewen/p/8214958.html
Copyright © 2020-2023  润新知