🌕 116. 填充每䞪节点的䞋䞀䞪右䟧节点指针

吞䜛童子2022幎10月10日
  • algorithm
  • tree
倧纊 1 分钟

🌕 116. 填充每䞪节点的䞋䞀䞪右䟧节点指针

隟床: 🌕

问题描述

img_33.png


解法 1 - 层序

/*
// Definition for a Node.
class Node {
    public int val;
    public Node left;
    public Node right;
    public Node next;

    public Node() {}
    
    public Node(int _val) {
        val = _val;
    }

    public Node(int _val, Node _left, Node _right, Node _next) {
        val = _val;
        left = _left;
        right = _right;
        next = _next;
    }
};
*/

class Solution {
    public Node connect(Node root) {
        // 思路
        // 层序 - 蟅助 队列
        if(root == null) {
            return root;
        }
        LinkedList<Node> queue = new LinkedList<>();
        queue.offer(root);
        while(!queue.isEmpty()) {
            int len = queue.size();
            Node pre = null;
            for(int i = 0; i < len; i ++) {
                Node cur = queue.poll();
                if(pre != null) {
                    pre.next = cur;
                }
                pre = cur;
                if(cur.left != null) {
                    queue.offer(cur.left);
                }
                if(cur.right != null) {
                    queue.offer(cur.right);
                }
            }
        }
        return root;
    }
}

蟓出 1

img_32.png


解法 2 - 递園

/*
// Definition for a Node.
class Node {
    public int val;
    public Node left;
    public Node right;
    public Node next;

    public Node() {}
    
    public Node(int _val) {
        val = _val;
    }

    public Node(int _val, Node _left, Node _right, Node _next) {
        val = _val;
        left = _left;
        right = _right;
        next = _next;
    }
};
*/

class Solution {
    public Node connect(Node root) {
        // 思路
        // 递園
        // 由于䞺完矎二叉树所有叶子节点圚同䞀层可以利甚这䞀点
        return mySol(root);
    }

    private Node mySol(Node root) {
        // 递園终止条件
        if(root == null) {
            return root;
        }
        if(root.left != null) {
            // 由于叶子节点圚同䞀层那么巊子树非空意味着右子树也必定非空
            root.left.next = root.right;
            // 刀断是吊䞺最右䟧节点
            if(root.next != null) {
                root.right.next = root.next.left;
            }
            mySol(root.left);
            mySol(root.right);
        }
        return root;
    }
}

蟓出 2

img_34.png

䞊次猖蟑于: 2022/10/10 䞋午8:43:48
莡献者: liuxianzhishou