# Insertion in binary search tree without recursion in swift

Swift program for Insertion in binary search tree without recursion. Here more information.

```
import Foundation
// Swift 4 program for
// iterative insert in binary search tree
class TreeNode
{
var data: Int;
var left: TreeNode? ;
var right: TreeNode? ;
init(_ data: Int)
{
self.data = data;
self.left = nil;
self.right = nil;
}
}
class BinarySearchTree
{
var root: TreeNode? ;
init()
{
self.root = nil;
}
//insert a element
func addNode(_ data: Int)
{
// Create a new node
let node: TreeNode? = TreeNode(data);
if (self.root == nil)
{
// When adds a first node in bst
self.root = node;
}
else
{
var find: TreeNode? = self.root;
// Add new node to proper position
while (find != nil)
{
if (find!.data >= data)
{
if (find!.left == nil)
{
// When left child empty
// So add new node here
find!.left = node;
return;
}
else
{
// Otherwise
// Visit left sub-tree
find = find!.left;
}
}
else
{
if (find!.right == nil)
{
// When right child empty
// So add new node here
find!.right = node;
return;
}
else
{
// Visit right sub-tree
find = find!.right;
}
}
}
}
}
// Display preorder
func preorder(_ node: TreeNode? )
{
if (node != nil)
{
// Display node value
print(" ",node!.data, terminator: "");
// Visit to left subtree
self.preorder(node!.left);
// Visit to right subtree
self.preorder(node!.right);
}
}
func inorder(_ node: TreeNode? )
{
if (node != nil)
{
// Visit to left subtree
self.inorder(node!.left);
// Display node value
print(" ",(node!.data), terminator: "");
// Visit to right subtree
self.inorder(node!.right);
}
}
func postorder(_ node: TreeNode? )
{
if (node != nil)
{
// Visit to left subtree
self.postorder(node!.left);
// Visit to right subtree
self.postorder(node!.right);
// Display node value
print(" ",(node!.data), terminator: "");
}
}
static func main()
{
let tree: BinarySearchTree = BinarySearchTree();
/*
10
/ \
/ \
4 15
/ \ /
3 5 12
-------------
Build binary search tree
*/
tree.addNode(10);
tree.addNode(4);
tree.addNode(3);
tree.addNode(5);
tree.addNode(15);
tree.addNode(12);
// Display tree nodes
print("Preorder ");
tree.preorder(tree.root);
print("\nInorder ");
tree.inorder(tree.root);
print("\nPostorder ");
tree.postorder(tree.root);
}
}
BinarySearchTree.main();
```

**Output**

```
Preorder
10 4 3 5 15 12
Inorder
3 4 5 10 12 15
Postorder
3 5 4 12 15 10
```

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.

## New Comment