1. Insert node and print Inorder Traversal :
#include <iostream>
using namespace std;
class BST
{
int
data;
BST *left,
*right;
public :
BST();
BST( int );
// Insert
function.
BST* Insert(BST
*, int );
// Inorder
traversal.
void
Inorder(BST *);
};
BST :: BST() : data(0), left(NULL),
right(NULL){}
BST :: BST( int value)
{
data =
value;
left = right =
NULL;
}
BST* BST :: Insert(BST *root, int
value)
{
if (!root)
{
// if root NULL then
insert node.
return
new BST(value);
}
// Insert
data.
if (value
> root->data)
{
root->right = Insert(root->right, value);
}
else
{
root->left = Insert(root->left, value);
}
return
root;
}
void BST :: Inorder(BST *root)
{
if (!root)
{
return ;
}
Inorder(root->left);
cout <<
root->data << endl;
Inorder(root->right);
}
int main()
{
BST b, *root =
NULL;
root = b.Insert(root,
50);
b.Insert(root,
30);
b.Insert(root,
20);
b.Insert(root,
40);
b.Insert(root,
70);
b.Insert(root,
60);
b.Insert(root,
80);
b.Inorder(root);
return
0;
}
|
2. Find key:
#include <iostream>
using namespace std;
// Binary tree node
struct Node {
int
data;
struct
Node *left, *right;
Node( int
data)
{
this ->data
= data;
left
= right = NULL;
}
};
bool ifNodeExists( struct
Node* node, int key)
{
if (node
== NULL)
return
false ;
if
(node->data == key)
return
true ;
/* then recur on left
sutree */
bool
res1 = ifNodeExists(node->left, key);
// node
found
if (res1)
return true ;
//node not prsent at left side
bool
res2 = ifNodeExists(node->right, key);
return
res2;
}
// Driver Code
int main()
{
struct
Node* root = new
Node(0);
root->left
= new Node(1);
root->left->left
= new Node(3);
root->left->left->left
= new Node(17);
root->left->right
= new Node(4);
root->left->right->left
= new Node(8);
root->left->right->right
= new Node(90);
root->right
= new Node(2);
root->right->left
= new Node(5);
root->right->right
= new Node(6);
int key
= 4;
if
(ifNodeExists(root, key))
cout
<< "YES" ;
else
cout
<< "NO" ;
return
0;
}
3. count no. of leaf node in tree:
#include <bits/stdc++.h>
using namespace std;
struct node
{
int
data;
struct
node* left;
struct
node* right;
};
unsigned int
getLeafCount( struct node*
node)
{
if (node
== NULL)
return
0;
if (node->left
== NULL && node->right == NULL)
return
1;
else
return
getLeafCount(node->left)+
getLeafCount(node->right);
}
struct node* newNode( int
data)
{
struct
node* node = ( struct
node*)
malloc ( sizeof ( struct
node));
node->data =
data;
node->left =
NULL;
node->right =
NULL;
return (node);
}
int main()
{
/*create a
tree*/
struct
node *root = newNode(1);
root->left =
newNode(12);
root->right =
newNode(13);
root->left->left =
newNode(40);
root->left->right
= newNode(75);
cout << "No. of leaf node:
" <<
getLeafCount(root)
<< endl;
return 0;
}
4. To calculate height of tree:
#include <bits/stdc++.h>
using namespace std;
class node
{
public :
int
data;
node*
left;
node*
right;
};
int maxDepth(node* node)
{
if (node
== NULL)
return
0;
else
{
int
lDepth = maxDepth(node->left);
int
rDepth = maxDepth(node->right);
if
(lDepth > rDepth)
return (lDepth
+ 1);
else
return (rDepth + 1);
}
}
node* newNode( int
data)
{
node* Node =
new node();
Node->data =
data;
Node->left =
NULL;
Node->right =
NULL;
return (Node);
}
int main()
{
node *root =
newNode(1);
root->left = newNode(2);
root->right =
newNode(3);
root->left->left =
newNode(4);
root->left->right
= newNode(5);
cout <<
"Height of tree is " <<
maxDepth(root);
return
0;
}
|