# Inorder traversal of binary tree using stack in kotlin

Kotlin program for Inorder traversal of binary tree using stack. Here problem description and explanation.

``````// Kotlin program for
// Inorder traversal without recursion
// Using stack

// Binary Tree node
class TreeNode
{
var data: Int;
var left: TreeNode ? ;
var right: TreeNode ? ;
// Make a tree node
constructor(data: Int)
{
// Set node data
this.data = data;
this.left = null;
this.right = null;
}
}
class StackNode
{
var element: TreeNode ? ;
var next: StackNode ? ;
constructor(element: TreeNode ? )
{
this.element = element;
this.next = null;
}
}
// Stack Class
class MyStack
{
var top: StackNode ? ;
var size: Int;
constructor()
{
this.top = null;
this.size = 0;
}
// Add new element into stack
fun push(element: TreeNode ? ): Unit
{
// Create new node
val node: StackNode = StackNode(element);
node.next = this.top;
// new node is new top
this.top = node;
// Increase the size
this.size += 1;
}
// Remove top element of the stack
fun pop(): Unit
{
if (this.top != null)
{
// next node is new top
this.top = this.top?.next;
// Reduce size
this.size -= 1;
}
}
// Returns the status of empty or non empty stacks
fun isEmpty(): Boolean
{
if (this.size > 0 && this.top != null)
{
return false;
}
else
{
return true;
}
}
fun peek(): TreeNode ?
{
if (this.isEmpty())
{
return null;
}
return this.top?.element;
}
}
class BinaryTree
{
var root: TreeNode ? ;
constructor()
{
this.root = null;
}
// Display Inorder view of binary tree
fun inorder(): Unit
{
if (this.root != null)
{
// Make new stack
val s: MyStack = MyStack();
var node: TreeNode ? = this.root;
// Display tree element
while (!s.isEmpty() || node != null)
{
if (node != null)
{
s.push(node);
// Visit to left subtree
node = node.left;
}
else
{
// When node is null
// Get stack top element
node = s.peek();
// Display node value
print(" " + node!!.data);
// Remove top element of the stack
s.pop();
// Visit to left subtree of current node
node = node.right;
}
}
}
else
{
}
}
}
fun main(args: Array < String > ): Unit
{
// Create new tree
val tree: BinaryTree = BinaryTree();
/*
Construct Binary Tree
-----------------------
15
/  \
24   54
/    /  \
35   62   13
*/
tree.root = TreeNode(15);
tree.root?.left = TreeNode(24);
tree.root?.right = TreeNode(54);
tree.root?.right?.right = TreeNode(13);
tree.root?.right?.left = TreeNode(62);
tree.root?.left?.left = TreeNode(35);
// Display result
tree.inorder();
}``````

Output

`` 35 24 15 62 54 13``

## Comment

Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.