GeeksforGeeks » C/C++ Programming Questions
binary search tree
(1 post)-
Help! My home work is to create a binary search tree with integers.
The program below print out inorder, preorder, postorder traversals. How do I code to get number of leaf nodes, number of nodes with one child, number of nodes with two child, max and min leaf nodes, height of tree and if the tree is balanced?
_____________________________________________________
#include <iostream>
using namespace std;const int nil = 0;
class treenode_type // declaration of class//
{
public: // Tree node type//
int info;
treenode_type *left;
treenode_type *right;
};void setleft(int x);
void setright(int x);
void inorder(treenode_type *p);
void preorder(treenode_type *p);
void postorder(treenode_type *p);
treenode_type *p,*q,*root;
int number;
void main()
{
cout << "Enter first value: \n";
cin >> number;
cout << number << "\n";
root = new treenode_type;
(*root).info = number;
(*root).left = nil;
(*root).right = nil;
cout <<"Enter other numbers terminated by -999\n";
cin >> number;
while (number != -999)
{
p = root;
q = p;
while ((number != (*p).info) && (q!=nil))
{
p = q;
if (number < (*p).info)
q = (*p).left;
else
q = (*p).right;
}
if (number == (*p).info)
cout << number << " is a duplicate \n";
else if (number < (*p).info) // Sets node to left if number less than p.info//
{
setleft(number);
cout << number <<" is a left child of "<< (*p).info << "\n";
}
else // Sets node to right if number greater than p.info//
{
setright(number);
cout << number <<" is a right child of "<< (*p).info << "\n";
}
cin >> number;
}
cout << "The tree traversed INORDER is \n";
p = root;
inorder(p);cout << "The tree traversed PREORDER is \n";
p = root;
preorder(p);cout << "The tree traversed POSTORDER is \n";
p = root;
postorder(p);
}void setleft(int x) // Sets node to left //
{
treenode_type *q;
q = new treenode_type;
(*q).info = x;
(*q).left = nil;
(*q).right = nil;
(*p).left = q;
}
void setright(int x)
{
treenode_type *q;
q = new treenode_type;
(*q).info = x;
(*q).left = nil;
(*q).right = nil;
(*p).right = q;
}
void inorder(treenode_type *r)
{
if (r != nil)
{
inorder((*r).left);
cout << (*r).info << "\n";
inorder((*r).right);
}// count number of leaf nodes
int treenode_type::sumLeaf(node* node1)
{
if(node1 == NULL) return 0;
if(node1->left == NULL && node1->right == NULL) return 1;
else return sumLeaf(node1->left) + sumLeaf(node1->right);
}void preorder(treenode_type *r)
{
if (r != nil)
{
cout << (*r).info << "\n";
preorder((*r).left);
preorder((*r).right);
}
}void postorder(treenode_type *r)
{
if (r != nil)
{
postorder((*r).left);
postorder((*r).right);
cout << (*r).info << "\n";
}
}
Reply
You must log in to post.