Skip to content
This repository was archived by the owner on Feb 3, 2025. It is now read-only.

Commit 28f0da7

Browse files
committed
XD
1 parent 42f1c67 commit 28f0da7

File tree

1 file changed

+84
-26
lines changed

1 file changed

+84
-26
lines changed

Node.py

Lines changed: 84 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,93 @@
1+
import collections
2+
3+
14
class Node :
25
def __init__(self , data ) :
36
self.left = None
47
self.right = None
58
self.data = data
69

7-
def insert(self, data) :
8-
if data < self.data :
9-
if self.left :
10-
self.left.insert(data)
11-
else :
12-
self.left = Node(data)
13-
return
14-
10+
class BinaryTree :
11+
def __init__(self , root) :
12+
self.root = Node(root)
13+
14+
def PrintTree(self , trav_type) :
15+
if trav_type == "preorder" :
16+
return self.preorder_tree(tree.root , "")
17+
elif trav_type == "inorder" :
18+
return self.inorder_tree(tree.root , "")
19+
elif trav_type == "postorder" :
20+
return self.postorder_tree(tree.root , "")
21+
elif trav_type == "levelorder" :
22+
return self.levelorder_tree(tree.root)
1523
else :
16-
if self.right :
17-
self.right.insert(data)
18-
else :
19-
self.right = Node(data)
20-
return
24+
return False
25+
26+
def preorder_tree(self , start , trav) :
27+
## ROOT > LEFT > RIGHT
28+
if start :
29+
trav += (str(start.data) + "__" )
30+
trav = self.preorder_tree(start.left , trav)
31+
trav = self.preorder_tree(start.right , trav)
32+
return trav
33+
34+
def inorder_tree(self , start , trav) :
35+
## LEFT > ROOT > RIGHT
36+
if start :
37+
trav = self.inorder_tree(start.left , trav)
38+
trav += (str(start.data) + "__")
39+
trav = self.inorder_tree(start.right , trav)
40+
return trav
2141

22-
def PrintTree(self) :
23-
if self.left :
24-
self.left.PrintTree()
25-
print(self.data)
26-
if self.right :
27-
self.right.PrintTree()
42+
def postorder_tree(self , start , trav) :
43+
## LEFT > RIGHT > ROOT
44+
if start :
45+
trav = self.postorder_tree(start.left , trav)
46+
trav = self.postorder_tree(start.right , trav)
47+
trav += (str(start.data) + "__")
48+
return trav
49+
def levelorder_tree(self , start) :
50+
ans = []
51+
if start is None :
52+
return ans
53+
54+
queue = collections.deque()
55+
queue.append(start)
56+
57+
while queue :
58+
currSize = len(queue)
59+
currList = []
60+
61+
while currSize > 0 :
62+
currNode = queue.popleft()
63+
currList.append(currNode.data)
64+
currSize -= 1
65+
66+
if currNode.left is not None :
67+
queue.append(currNode.left)
68+
69+
if currNode.right is not None :
70+
queue.append(currNode.right)
71+
ans.append(currList)
72+
return ans
73+
74+
75+
"""_summary_
76+
2
77+
/ \
78+
3 4
79+
/ \
80+
5 6
81+
[2]
82+
[3.4]
83+
[5,6]
84+
"""
85+
86+
87+
tree = BinaryTree(2)
88+
tree.root.left = Node(3)
89+
tree.root.right = Node(4)
90+
tree.root.left.left = Node(5)
91+
tree.root.left.right = Node(6)
2892

29-
l = Node(2)
30-
l.insert(5)
31-
l.insert(1)
32-
l.insert(7)
33-
l.insert(9)
34-
l.insert(10)
35-
l.PrintTree()
93+
print(tree.PrintTree("levelorder"))

0 commit comments

Comments
 (0)