# Preorder Traversal of Binary Search Tree

Preorder traversal is one of the depth first tree traversal methods.

Preorder : Root - Left - Right

#### Algorithm

Visit or print the root.

Traverse the left subtree.

Traverse the right subtree.

## Preorder traversal function

```//preorder traversal of binary search tree
void preorder(struct node *root)
{
if(root == NULL)
return;

//visit the root
printf("%d ",root->key);

//traverse the left subtree
preorder(root->left);

//traverse the right subtree
preorder(root->right);
}
```

## Preorder Traversal Source Code

Example

```/*
* Program  : Preorder traversal of binary search tree
* Language : C
*/

#include<stdio.h>
#include<stdlib.h>

struct node
{
int key;
struct node *left;
struct node *right;
};

//return a new node with the given value
struct node *getNode(int val)
{
struct node *newNode;

newNode = malloc(sizeof(struct node));

newNode->key   = val;
newNode->left  = NULL;
newNode->right = NULL;

return newNode;
}

//inserts nodes in the binary search tree
struct node *insertNode(struct node *root, int val)
{
if(root == NULL)
return getNode(val);

if(root->key < val)
root->right = insertNode(root->right,val);

if(root->key > val)
root->left = insertNode(root->left,val);

return root;
}

//preorder traversal of the binary search tree
void preorder(struct node *root)
{
if(root == NULL)
return;

//visit the root
printf("%d ",root->key);

//traverse the left subtree
preorder(root->left);

//traverse the right subtree
preorder(root->right);
}

int main()
{
struct node *root = NULL;

root = insertNode(root,100);
root = insertNode(root, 50);
root = insertNode(root, 200);
root = insertNode(root, 10);
root = insertNode(root, 60);
root = insertNode(root, 150);
root = insertNode(root, 300);

preorder(root);

return 0;
}
```