thanks i think that some of tips you gave me will help me to solve my problem
thanks i think that some of tips you gave me will help me to solve my problem
it is not my homework
i'm just preparing for exam and trying to find how to make these functions non-recursive
it's very possible that my teacher will give some of these functions for my next exam
hi everyone i'm having a problem with binary tree functions
i don't know how to make functions traverse, insert and search to be non-recursive
i have a recursive code for these functions
here is code of "bintree.h"
#pragma once
#include <iostream>
using namespace std;
template <typename Type>
class bintree {
public:
struct treenode
{
Type Element;
treenode *left, *right;
treenode() : left(0), right(0) {}
treenode(Type item, treenode *leftnode=0,treenode *rightnode=0) :
Element(item), left(leftnode),right(rightnode) {}
};
protected:
treenode *root;
Type RefValue;
bool Insert(treenode* &tree, const Type& item);
bool NInsert(treenode* &tree,const Type& item);
void Traverse(treenode *tree, ostream& out) const;
bool Search(treenode* tree, const Type& item) const;
void destroy(treenode *tree);
public:
bintree() : root(0) {}
bintree(Type refvalue) : RefValue(refvalue),root(0) {}
virtual ~bintree();
virtual bool Insert(const Type& item);
virtual bool Search(const Type& item) const;
virtual bool Delete(const Type& item);
friend istream& operator>><>(istream& in,bintree<Type>& Tree);
friend ostream& operator<<<>(ostream& out, const bintree<Type>& Tree);
};
here is code of "bintemp.h" where functions are defined
#pragma once
#include "bintree.h"
template <typename Type>
bool bintree<Type>::Insert(treenode* &tree,const Type& item)
{
if (tree == 0) {
tree = new treenode(item);
return tree ? true : false;
}
else if (item < tree->Element)
return Insert(tree->left, item);
else return Insert(tree->right, item);
}
template <typename Type>
void bintree<Type>::Traverse(treenode *tree,ostream& out) const
{
if (tree) {
Traverse(tree->left, out);
out << tree->Element << ' ';
Traverse(tree->right, out);
}
}
template <typename Type>
bool bintree<Type>::Search(treenode* tree,const Type& item) const
{
if (tree) {
if (tree->Element == item)
return true;
else if (item < tree->Element)
return Search(tree->left, item);
else
return Search(tree->right, item);
}
return false;
}
i hope someone can help me