美文网首页
【leetcode】No.117:populating-next

【leetcode】No.117:populating-next

作者: I讨厌鬼I | 来源:发表于2019-07-27 18:59 被阅读0次

题目描述

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 tree,

         1
       /  \
      2    3
     / \    \
    4   5    7

After calling your function, the tree should look like:

         1 -> NULL
       /  \
      2 -> 3 -> NULL
     / \    \
    4-> 5 -> 7 -> NULL

思路

将树与链表结合起来的一道题,在第一层的时候通过leftright将第二层的节点连接起来,在第二层又连接第三层,那么如何将从第一层到第二层呢,用队列空间复杂度不合要求,所以可以考虑使用头节点来连接链表,可以顺理成章的从链表的头结点顺着遍历第二层的节点。

代码

/**
 * Definition for binary tree with next pointer.
 * public class TreeLinkNode {
 *     int val;
 *     TreeLinkNode left, right, next;
 *     TreeLinkNode(int x) { val = x; }
 * }
 */
public class Solution {
    public void connect(TreeLinkNode root) {
        while (root != null) {
            //创建一个头结点
            TreeLinkNode head = new TreeLinkNode(0);
            TreeLinkNode cur = head;
            while (root != null) {
                //将下一层节点连接成链表
                if (root.left != null){
                    cur.next = root.left;
                    cur = cur.next;
                }
                if (root.right != null){
                    cur.next = root.right;
                    cur = cur.next;
                }
                // 继续遍历下一个节点
                root = root.next;
            }
            // 如果遍历完该层,则从下一层的头结点下一个节点开始遍历
            root = head.next;
        }
    }
}

相关文章

网友评论

      本文标题:【leetcode】No.117:populating-next

      本文链接:https://www.haomeiwen.com/subject/augerctx.html