-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathinorder_successor.py
More file actions
executable file
·89 lines (71 loc) · 1.78 KB
/
inorder_successor.py
File metadata and controls
executable file
·89 lines (71 loc) · 1.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#!/usr/bin/python
"""
Given a Binary Tree where each node has following structure, write a function to
populate next pointer for all nodes. The next pointer for every node should be set to
point to inorder successor.
struct node
{
int data;
struct node* left;
struct node* right;
struct node* next;
}
http://www.geeksforgeeks.org/populate-inorder-successor-for-all-nodes/
"""
class Node(object):
def __init__(self, value):
self.value = value
self.left = None
self.right = None
self.next = None
prev = None
def inorder1(node):
""" Inorder traversal w/ global variable """
global prev
if not node:
return
inorder1(node.left)
if prev:
prev.next = node
prev = node
inorder1(node.right)
def inorder2(node, prev):
""" Inorder traversal w/o global variable """
if not node:
return
inorder2(node.left, prev)
if prev[0]:
prev[0].next = node
prev[0] = node
inorder2(node.right, prev)
next = None
def inorder3(node):
""" Reversed inorder traversal w/ global variable """
global next
if not node:
return
inorder3(node.right)
node.next = next
next = node
inorder3(node.left)
if __name__ == "__main__":
root = Node(30)
root.left = Node(20)
root.left.left = Node(10)
root.left.right = Node(25)
root.left.left.left = Node(0)
root.left.right.left = Node(22)
root.left.right.left.right = Node(23)
root.right = Node(40)
root.right.right = Node(45)
root.right.left = Node(35)
#inorder1(root)
prev = [None]
inorder2(root, prev)
#inorder3(root)
res = []
node = root.left.left.left
while node:
res.append(node.value)
node = node.next
print ",".join([str(n) for n in res])