Skip to content

Commit a95e96f

Browse files
committed
kth node with of BT during inorder traversal
1 parent 3af5260 commit a95e96f

File tree

453 files changed

+130
-242
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

453 files changed

+130
-242
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
from collections import namedtuple
2+
3+
4+
class Node:
5+
def __init__(self, val):
6+
self.val = val
7+
self.left = self.right = None
8+
9+
10+
def kth_node(tree, k):
11+
Result = namedtuple('Result', ['status', 'node'])
12+
i = 0
13+
14+
def inorder(node):
15+
nonlocal i
16+
if node is None:
17+
return Result(False, None)
18+
19+
left_result = inorder(node.left)
20+
if left_result.status:
21+
return left_result
22+
23+
i += 1
24+
if i == k:
25+
return Result(True, node)
26+
27+
right_result = inorder(node.right)
28+
if right_result.status:
29+
return right_result
30+
31+
return Result(False, None)
32+
33+
34+
return inorder(tree).node
35+
36+
def kth_node_2(tree, k):
37+
result = []
38+
39+
def inorder(node):
40+
if node is None:
41+
return
42+
inorder(node.left)
43+
result.append(node)
44+
inorder(node.right)
45+
46+
inorder(tree)
47+
return result[k-1] if k <= len(result) else None
48+
49+
50+
51+
52+
node_1 = Node(1)
53+
node_2 = Node(2)
54+
node_3 = Node(3)
55+
node_4 = Node(4)
56+
node_5 = Node(5)
57+
node_6 = Node(6)
58+
node_7 = Node(7)
59+
60+
node_1.left, node_1.right = node_2, node_3
61+
node_2.left, node_2.right = node_4, node_5
62+
node_3.left, node_3.right = node_6, node_7
63+
64+
65+
print("\nKth Node First Solution\n")
66+
print(kth_node(node_1, 1)) #4
67+
print(kth_node(node_1, 2)) #2
68+
print(kth_node(node_1, 3)) #5
69+
print(kth_node(node_1, 4)) #1
70+
print(kth_node(node_1, 5)) #6
71+
print(kth_node(node_1, 6)) #3
72+
print(kth_node(node_1, 7)) #7
73+
74+
print("\nKth Node Non Optimal Solution\n")
75+
print(kth_node_2(node_1, 1)) #4
76+
print(kth_node_2(node_1, 2)) #2
77+
print(kth_node_2(node_1, 3)) #5
78+
print(kth_node_2(node_1, 4)) #1
79+
print(kth_node_2(node_1, 5)) #6
80+
print(kth_node_2(node_1, 6)) #3
81+
print(kth_node_2(node_1, 7)) #7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
class Node:
2+
def __init__(self, val, size = 0):
3+
self.val, self.size = val, size
4+
self.left = self.right = None
5+
6+
7+
def kth_node(tree, k):
8+
if tree:
9+
while tree:
10+
left_size = tree.left.size if tree.left else 0
11+
if left_size + 1 < k:
12+
tree = tree.right
13+
k -= left_size + 1
14+
elif left_size == k - 1:
15+
return tree.val
16+
else:
17+
tree = tree.left
18+
19+
return None
20+
21+
22+
node_1 = Node(1, 7)
23+
node_2 = Node(2, 3)
24+
node_3 = Node(3, 3)
25+
node_4 = Node(4, 1)
26+
node_5 = Node(5, 1)
27+
node_6 = Node(6, 1)
28+
node_7 = Node(7, 1)
29+
30+
node_1.left, node_1.right = node_2, node_3
31+
node_2.left, node_2.right = node_4, node_5
32+
node_3.left, node_3.right = node_6, node_7
33+
34+
35+
print(kth_node(node_1, 1))
36+
print(kth_node(node_1, 2))
37+
print(kth_node(node_1, 3))
38+
print(kth_node(node_1, 4))
39+
print(kth_node(node_1, 5))
40+
print(kth_node(node_1, 6))
41+
print(kth_node(node_1, 7))
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)