File tree Expand file tree Collapse file tree 1 file changed +62
-0
lines changed
Expand file tree Collapse file tree 1 file changed +62
-0
lines changed Original file line number Diff line number Diff line change 1+ // Time complexity O(n) and space complexity O(1) with Follow-up constraints, without using recursion
2+ class Solution {
3+ fun connect (root : Node ? ): Node ? {
4+ var cur = root
5+ var next = cur?.left
6+
7+ while (cur != null && next != null ) {
8+ cur?.left?.next = cur?.right
9+ if (cur?.next != null )
10+ cur?.right?.next = cur?.next?.left
11+
12+ cur = cur?.next
13+ if (cur == null ) {
14+ cur = next
15+ next = cur?.left
16+ }
17+ }
18+
19+ return root
20+ }
21+ }
22+
23+ // Time complexity O(n) and space complexity O(1) with Follow-up constraints using recursion
24+ class Solution {
25+ fun connect (root : Node ? ): Node ? {
26+ root? : return null
27+
28+ root.left?.let {
29+ it.next = root.right
30+ root.right?.let {
31+ it.next = root.next?.left
32+ }
33+ connect(root.left)
34+ connect(root.right)
35+ }
36+
37+ return root
38+ }
39+ }
40+
41+ // Time complexity O(n) and space complexity O(logn)
42+ class Solution {
43+ fun connect (root : Node ? ): Node ? {
44+ with (LinkedList <Pair <Node ?, Int >>()) {
45+ addLast(root to 0 )
46+
47+ while (isNotEmpty()) {
48+ repeat (size) {
49+ val (curNode, curLevel) = removeFirst()
50+ peekFirst()?.let { (nextNode, nextLevel) ->
51+ if (nextLevel == curLevel)
52+ curNode?.next = nextNode
53+ }
54+ curNode?.left?.let { addLast(it to (curLevel + 1 )) }
55+ curNode?.right?.let { addLast(it to (curLevel + 1 )) }
56+ }
57+ }
58+ }
59+
60+ return root
61+ }
62+ }
You can’t perform that action at this time.
0 commit comments