Height of a binary tree:
Level Order BFS in Binary Search Tree:
#include<bits/stdc++.h>
#include<queue>
using namespace std;
struct Node
{
char data;
Node *left;
Node *right;
};
//Function to print nodes in a binary tree in level order
void LevelOrder(Node *root)
{
if(root==NULL)
return;
queue<Node*> Q;
Q.push(root);
//while there is at least one discovered node
while(!Q.empty())
{
Node* current=Q.front();
Q.pop();
cout<<current->data<<" ";
if(current->left!=NULL)
Q.push(current->left);
if(current->right!=NULL)
Q.push(current->right);
}
}
//Function to insert node in a binary search tree
Node* Insert(Node *root, char data)
{
if(root==NULL)
{
root=new Node();
root->data=data;
root->left=root->right=NULL;
}
else if(data<=root->data)
root->left=Insert(root->left,data);
else
root->right=Insert(root->right,data);
return root;
}
int main()
{
//creating an example tree
Node *root=NULL;
root=Insert(root,'M');
root=Insert(root,'B');
root=Insert(root,'Q');
root=Insert(root,'Z');
root=Insert(root,'A');
root=Insert(root,'C');
LevelOrder(root);
}
output:
M B Q A C Z
DFS in Preorder, Inorder, Postorder:
#include<bits/stdc++.h>
#include<queue>
using namespace std;
struct Node
{
char data;
Node *left;
Node *right;
};
//Function to print nodes in a binary tree in level order
void Preorder(struct Node* root){
if(root==NULL)
return;
printf("%c ",root->data);//print data
Preorder(root->left); //visit left subtree
Preorder(root->right); //Visit right subtree
}
//function to visit nodes in Inorder
void Inorder(Node* root)
{
if(root==NULL)
return;
Inorder(root->left); //Visit left subtree
printf("%c ",root->data); //Print data
Inorder(root->right); //Visit right subtree
}
void Postorder(Node* root)
{
if(root==NULL)
return;
Postorder(root->left); //visit left subtree
Postorder(root->right); //visit right subtree
printf("%c ",root->data); //print data
}
//Function to insert node in a binary search tree
Node* Insert(Node *root, char data)
{
if(root==NULL)
{
root=new Node();
root->data=data;
root->left=root->right=NULL;
}
else if(data<=root->data)
root->left=Insert(root->left,data);
else
root->right=Insert(root->right,data);
return root;
}
int main()
{
//creating an example tree
Node *root=NULL;
root=Insert(root,'M');
root=Insert(root,'B');
root=Insert(root,'Q');
root=Insert(root,'Z');
root=Insert(root,'A');
root=Insert(root,'C');
//Print nodes in preorder
cout<<"Preorder: ";
Preorder(root);
cout<<endl;
//Print nodes in in inorder
cout<<"Inorder: ";
Inorder(root);
cout<<endl;
//Print Nodes in postorder
cout<<"Postorder: ";
Postorder(root);
cout<<endl;
return 0;
}
output:
Preorder: M B A C Q Z Inorder: A B C M Q Z Postorder: A C B Z Q M