1
+
2
+ # COMPARE LEAF TRAVERSAL
3
+
4
+ # This is an input class. Do not edit.
5
+ class BinaryTree :
6
+ def __init__ (self , value , left = None , right = None ):
7
+ self .value = value
8
+ self .left = left
9
+ self .right = right
10
+
11
+ # O(N + M) time and O(max(H1, H2)) space
12
+ def compareLeafTraversal (tree1 , tree2 ):
13
+ # Write your code here.
14
+ list1 , _ = connectLeafNodes (tree1 )
15
+ list2 , _ = connectLeafNodes (tree2 )
16
+
17
+ current1 = list1
18
+ current2 = list2
19
+ while current1 is not None and current2 is not None :
20
+ if current1 .value != current2 .value :
21
+ return False
22
+
23
+ current1 = current1 .right
24
+ current2 = current2 .right
25
+
26
+ return current1 is None and current2 is None
27
+
28
+ def connectLeafNodes (currentNode , head = None , previousNode = None ):
29
+ if currentNode is None :
30
+ return head , previousNode
31
+
32
+ if isLeafNode (currentNode ):
33
+ if previousNode is None :
34
+ head = currentNode
35
+ else :
36
+ previousNode .right = currentNode
37
+
38
+ previousNode = currentNode
39
+
40
+ leftHead , leftPreviousNode = connectLeafNodes (currentNode .left , head , previousNode )
41
+ return connectLeafNodes (currentNode .right , leftHead , leftPreviousNode )
42
+
43
+ def isLeafNode (node ):
44
+ return node .left is None and node .right is None
0 commit comments