zoukankan      html  css  js  c++  java
  • leetcode 117 填充每个节点的下一个右侧节点指针 II

    给定一个二叉树

    struct Node {
    int val;
    Node *left;
    Node *right;
    Node *next;
    }
    填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。

    初始状态下,所有 next 指针都被设置为 NULL。

    进阶:

    你只能使用常量级额外空间。
    使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。
     

    示例:

    输入:root = [1,2,3,4,5,null,7]
    输出:[1,#,2,3,#,4,5,7,#]
    解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。
     

    提示:

    树中的节点数小于 6000
    -100 <= node.val <= 100

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node-ii
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    next使得每一层都形成一个链表,一层一层遍历链表,从而建立下一层的链表。

    代码:

    /*
    // Definition for a Node.
    class Node {
    public:
        int val;
        Node* left;
        Node* right;
        Node* next;
    
        Node() : val(0), left(NULL), right(NULL), next(NULL) {}
    
        Node(int _val) : val(_val), left(NULL), right(NULL), next(NULL) {}
    
        Node(int _val, Node* _left, Node* _right, Node* _next)
            : val(_val), left(_left), right(_right), next(_next) {}
    };
    */
    
    class Solution {
    public:
        Node* connect(Node* root) {
            Node *ph = root,*psh = NULL,*p = NULL;
            if(ph) ph -> next = NULL;
            while(ph) {
                if(ph -> left) {
                    if(psh == NULL) p = psh = ph -> left;
                    else {
                        p -> next = ph -> left;
                        p = p -> next;
                    }
                }
                if(ph -> right) {
                    if(psh == NULL) p = psh = ph -> right;
                    else {
                        p -> next = ph -> right;
                        p = p -> next;
                    }
                }
                ph = ph -> next;
                if(ph == NULL) {
                    if(p) p -> next = NULL;
                    ph = psh;
                    psh = NULL;
                }
            }
            return root;
        }
    };
    如果觉得有帮助,点个推荐啦~
  • 相关阅读:
    asp.net 邮件发送,使用外部stmp服务器,呵呵!简单例子
    asp.net 新闻采集 简单示例
    JS 计算时间差
    textarea行尾输入多个空格不换行
    mac系统安装redis
    RSA 分段加解密【解决“不正确的长度”的异常】
    C# 获取指定进程的主窗口句柄
    .Net自定义控件之ToolboxBitmap元数据的设置
    提升 SharePoint 代码执行权限
    关于ThreadLocal的使用
  • 原文地址:https://www.cnblogs.com/8023spz/p/13742995.html
Copyright © 2011-2022 走看看