Skip to content

Commit d7260d1

Browse files
Merge pull request #10 from Jacob3075/dsa-#3-kotlin-btree
Added code for binary tree
2 parents 69b8408 + 7a6a50f commit d7260d1

File tree

1 file changed

+141
-0
lines changed

1 file changed

+141
-0
lines changed

Binary Tree/BTree.kt

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
import java.util.LinkedList
2+
import java.util.Queue
3+
import java.util.Scanner
4+
5+
class BTree {
6+
var root: Node? = null
7+
var temp = root
8+
9+
private fun insert(temp: Node?, key: Int) {
10+
var temp = temp
11+
if (temp == null) {
12+
root = Node(key)
13+
return
14+
}
15+
val q: Queue<Node?> = LinkedList()
16+
q.add(temp)
17+
18+
// Do level order traversal until we find
19+
// an empty place.
20+
while (!q.isEmpty()) {
21+
temp = q.peek()
22+
q.remove()
23+
if (temp!!.left == null) {
24+
temp.left = Node(key)
25+
break
26+
} else q.add(temp.left)
27+
if (temp.right == null) {
28+
temp.right = Node(key)
29+
break
30+
} else q.add(temp.right)
31+
}
32+
}
33+
34+
private fun deleteDeepest(root: Node?, delNode: Node?) {
35+
val q: Queue<Node?> = LinkedList()
36+
q.add(root)
37+
var temp: Node? = null
38+
39+
// Do level order traversal until last node
40+
while (!q.isEmpty()) {
41+
temp = q.peek()
42+
q.remove()
43+
if (temp === delNode) {
44+
temp = null
45+
return
46+
}
47+
if (temp!!.right != null) {
48+
if (temp.right === delNode) {
49+
temp.right = null
50+
return
51+
} else q.add(temp.right)
52+
}
53+
if (temp.left != null) {
54+
if (temp.left === delNode) {
55+
temp.left = null
56+
return
57+
} else q.add(temp.left)
58+
}
59+
}
60+
}
61+
62+
// Function to delete given element
63+
// in binary tree
64+
fun delete(root: Node?, key: Int) {
65+
var root: Node? = root ?: return
66+
if (root!!.left == null && root.right == null) {
67+
if (root.data == key) {
68+
root = null
69+
return
70+
} else return
71+
}
72+
val q: Queue<Node?> = LinkedList()
73+
q.add(root)
74+
var temp: Node? = null
75+
var keyNode: Node? = null
76+
77+
// Do level order traversal until
78+
// we find key and last node.
79+
while (!q.isEmpty()) {
80+
temp = q.peek()
81+
q.remove()
82+
if (temp!!.data == key) keyNode = temp
83+
if (temp.left != null) q.add(temp.left)
84+
if (temp.right != null) q.add(temp.right)
85+
}
86+
if (keyNode != null) {
87+
val x: Int = temp!!.data
88+
deleteDeepest(root, temp)
89+
keyNode.data = x
90+
}
91+
}
92+
93+
private fun preorder(node: Node?) {
94+
// N -> L -> R
95+
if (node == null) return
96+
print(node.data.toString() + " ")
97+
preorder(node.left)
98+
preorder(node.right)
99+
}
100+
101+
private fun inorder(temp: Node?) {
102+
// L -> N -> R
103+
if (temp == null) return
104+
inorder(temp.left)
105+
print(temp.data.toString() + " ")
106+
inorder(temp.right)
107+
}
108+
109+
private fun postorder(node: Node?) {
110+
// L -> R -> N
111+
if (node == null) return
112+
postorder(node.left)
113+
postorder(node.right)
114+
print(node.data.toString() + " ")
115+
}
116+
117+
fun main(args: Array<String>) {
118+
val sc = Scanner(System.`in`)
119+
println("Enter the number of node: ")
120+
val n = sc.nextInt()
121+
for (i in 0 until n) {
122+
val k = sc.nextInt()
123+
insert(root, k)
124+
}
125+
println("Preorder Traversal (N -> L -> R): ")
126+
preorder(root)
127+
println()
128+
println("Inorder Traversal (L -> N -> R): ")
129+
inorder(root)
130+
println()
131+
println("Postorder Traversal (L -> R -> N): ")
132+
postorder(root)
133+
println()
134+
sc.close()
135+
}
136+
137+
class Node(var data: Int) {
138+
var left: Node? = null
139+
var right: Node? = null
140+
}
141+
}

0 commit comments

Comments
 (0)