dfs: O(n) + O(1)

bfs: O(n) + O(n)

public class Solution {
    public void connect(TreeLinkNode root) {
        dfsHelper(root);
    }

    private void dfsHelper(TreeLinkNode node) {
        if (node == null) return;
        if (node.left == null && node.right == null) return;

        node.left.next = node.right;

        if (node.next != null) {
            node.right.next = node.next.left;
        }

        dfsHelper(node.left);
        dfsHelper(node.right);
    }
}

get rid of helper function

public class Solution {
    public void connect(TreeLinkNode node) {
        if (node == null) return;
        if (node.left == null && node.right == null) return;

        node.left.next = node.right;

        if (node.next != null) {
            node.right.next = node.next.left;
        }

        connect(node.left);
        connect(node.right);
    }

}

Follow up - what if the given tree could be any binary tree

bfs without queue

public class Solution {
    public void connect(TreeLinkNode root) {
        TreeLinkNode dummyChild = new TreeLinkNode(0);
        TreeLinkNode prevChild = dummyChild;

        while (root != null) {
            if (root.left != null) {
                prevChild.next = root.left;
                prevChild = prevChild.next;
            }

            if (root.right != null) {
                prevChild.next = root.right;
                prevChild = prevChild.next;
            }

            if (root.next != null) root = root.next;
            else {
                prevChild = dummyChild;
                root = dummyChild.next;
                dummyChild.next = null;
            }
        }

    }
}

results matching ""

    No results matching ""