Commit f75a587 1 parent 74dc530 commit f75a587 Copy full SHA for f75a587
File tree 2 files changed +75
-0
lines changed
leetcode.com 426. Convert Binary Search Tree to Sorted Doubly Linked List [Premium]
2 files changed +75
-0
lines changed Original file line number Diff line number Diff line change
1
+ # Definition for a Node.
2
+ from typing import Optional , List
3
+
4
+
5
+ class Node :
6
+ def __init__ (self , val , left = None , right = None ):
7
+ self .val = val
8
+ self .left = left
9
+ self .right = right
10
+
11
+
12
+ class Solution :
13
+ def __init__ (self ):
14
+ self .root : Optional [Node ] = None
15
+ self .prev : Optional [Node ] = None
16
+ self .list : List [Optional [Node ]] = []
17
+
18
+ def treeToDoublyList (self , root : Optional [Node ]) -> Optional [Node ]:
19
+ if not root :
20
+ return None
21
+
22
+ self .inorder (root )
23
+
24
+ for node in self .list :
25
+ self .visit (node )
26
+
27
+ return self .root
28
+
29
+ def append (self , node : Optional [Node ]):
30
+ self .list .append (node )
31
+ print (node .val )
32
+
33
+ def visit (self , node : Optional [Node ]):
34
+ if not self .root :
35
+ self .root = node
36
+ self .prev = node
37
+ self .prev .left = node
38
+ self .prev .right = node
39
+ else :
40
+ if self .root == self .prev :
41
+ self .prev .right = node
42
+ self .prev .left = node
43
+ node .left = self .prev
44
+ node .right = self .prev
45
+ self .prev = node
46
+ else :
47
+ self .prev .right = node
48
+ node .left = self .prev
49
+ node .right = self .root
50
+ self .root .left = node
51
+ self .prev = node
52
+
53
+
54
+ def inorder (self , node : Optional [Node ]):
55
+ if node .left :
56
+ self .inorder (node .left )
57
+
58
+ self .append (node )
59
+
60
+ if node .right :
61
+ self .inorder (node .right )
Original file line number Diff line number Diff line change
1
+ from unittest import TestCase
2
+ from main import Solution , Node
3
+
4
+ class TestSolution (TestCase ):
5
+ def test1_tree_to_doubly_list (self ):
6
+ sol = Solution ()
7
+ node1 = Node (1 )
8
+ node3 = Node (3 )
9
+ node2 = Node (2 , node1 , node3 )
10
+ node5 = Node (5 )
11
+ node4 = Node (4 , node2 , node5 )
12
+ answer = sol .treeToDoublyList (node4 )
13
+ print (answer .val )
14
+ self .assertEqual (0 , 0 )
You can’t perform that action at this time.
0 commit comments