proj home

Files   Classes   Functions   Hierarchy  

treeindexedD2node< INDX > Class Template Reference

Binary tree node with each node having an index. More...

#include <treeindexedD2.h>

Inheritance diagram for treeindexedD2node< INDX >:
Collaboration diagram for treeindexedD2node< INDX >:

List of all members.

Public Member Functions

boolc isleaf () const
 Is this a leaf node?
boolc isleft (INDX index2) const
 Is the node left?
boolc isright (INDX index2) const
 Is the node right?
boolc isleftinternal (INDX index2) const
 Is left an internal node?
boolc isrightinternal (INDX index2) const
 Is right an internal node?
 treeindexedD2node ()
 Unconstructed, classed as a leaf.
 treeindexedD2node (INDX const index_)
 Construct a leaf.
 treeindexedD2node (treeindexedD2node *left_, treeindexedD2node *right_, INDX index_)
 Construct a node.
 ~treeindexedD2node ()
 Memory cleanup if left and right are not zero.
void unlink ()
 Set the left and right pointers to zero recursively down the tree.
 operator stringc () const
 Serialize this object by writing it out as a string.
void printrecursive (string &s, INDX const parentindex, boolc branch) const
 Write the tree out as a linear list of nodes, where each node refers to a previous node.
void swap ()
 Swap left and right.
void nodecount (INDX &n)
 How many nodes are in the tree?

Public Attributes

treeindexedD2nodeleft
 The left branch.
treeindexedD2noderight
 The right branch.
INDX index
 The index to either whats in a node or whats in a leaf.


Detailed Description

template<typename INDX>
class treeindexedD2node< INDX >

Binary tree node with each node having an index.

Nodes and leafs indexed independently from each other. A zero index value is used for writing out the tree when there is no node on that branch.

The client can use the index as a pointer to the real data structure. The tree manages the nodes assuming that they were created with new.

There are deliberately no virtual functions. If a very (Designed for a large number of treeindexedD2node's. The cost is that leafs do not use left or right and nodes may or may not using index depending on the application.

Definition at line 117 of file treeindexedD2.h.


Constructor & Destructor Documentation

template<typename INDX >
treeindexedD2node< INDX >::treeindexedD2node (  )  [inline]

Unconstructed, classed as a leaf.

Definition at line 652 of file treeindexedD2.h.

00653   : left(0), right(0), index(0) 
00654 {
00655 }

template<typename INDX>
treeindexedD2node< INDX >::treeindexedD2node ( INDX const   index_  )  [inline]

Construct a leaf.

Definition at line 658 of file treeindexedD2.h.

00659   : left(0), right(0), index(index_) 
00660 {
00661 }

template<typename INDX>
treeindexedD2node< INDX >::treeindexedD2node ( treeindexedD2node< INDX > *  left_,
treeindexedD2node< INDX > *  right_,
INDX  index_ 
) [inline]

Construct a node.

Definition at line 665 of file treeindexedD2.h.

00670   : left(left_), right(right_), index(index_) 
00671 {
00672 }

template<typename INDX >
treeindexedD2node< INDX >::~treeindexedD2node (  )  [inline]

Memory cleanup if left and right are not zero.

Definition at line 676 of file treeindexedD2.h.

References treeindexedD2node< INDX >::left, and treeindexedD2node< INDX >::right.

00677 { 
00678   delete left; 
00679   delete right; 
00680   left=0;
00681   right=0;
00682 }


Member Function Documentation

template<typename INDX >
boolc treeindexedD2node< INDX >::isleaf (  )  const [inline]

template<typename INDX>
boolc treeindexedD2node< INDX >::isleft ( INDX  index2  )  const [inline]

Is the node left?

Definition at line 705 of file treeindexedD2.h.

References treeindexedD2node< INDX >::index, and treeindexedD2node< INDX >::left.

00706 {
00707   if (left==0) return false;
00708   if (left->index==index2) return true;
00709   return false;
00710 }

template<typename INDX>
boolc treeindexedD2node< INDX >::isleftinternal ( INDX  index2  )  const [inline]

Is left an internal node?

Definition at line 721 of file treeindexedD2.h.

References treeindexedD2node< INDX >::index, treeindexedD2node< INDX >::isleaf(), and treeindexedD2node< INDX >::left.

00722 { 
00723   if (left==0) return false;
00724   if (left->index!=index2) return false;
00725   if (left->isleaf()) return false;
00726   return true;
00727 }

template<typename INDX>
boolc treeindexedD2node< INDX >::isright ( INDX  index2  )  const [inline]

Is the node right?

Definition at line 713 of file treeindexedD2.h.

References treeindexedD2node< INDX >::index, and treeindexedD2node< INDX >::right.

00714 { 
00715   if (right==0) return false;
00716   if (right->index==index2) return true;
00717   return false;
00718 }

template<typename INDX>
boolc treeindexedD2node< INDX >::isrightinternal ( INDX  index2  )  const [inline]

Is right an internal node?

Definition at line 730 of file treeindexedD2.h.

References treeindexedD2node< INDX >::index, treeindexedD2node< INDX >::isleaf(), and treeindexedD2node< INDX >::right.

00731 { 
00732   if (right==0) return false;
00733   if (right->index!=index2) return false;
00734   if (right->isleaf()) return false;
00735   return true;
00736 }

template<typename INDX>
void treeindexedD2node< INDX >::nodecount ( INDX &  n  )  [inline]

How many nodes are in the tree?

Definition at line 639 of file treeindexedD2.h.

References treeindexedD2node< INDX >::isleaf(), treeindexedD2node< INDX >::left, treeindexedD2node< INDX >::nodecount(), and treeindexedD2node< INDX >::right.

Referenced by treeindexedD2node< INDX >::nodecount().

00640 {
00641   if (isleaf())
00642     return;
00643 
00644   ++n;
00645   if (left!=0)
00646     left->nodecount(n);
00647   if (right!=0)
00648     right->nodecount(n);
00649 }

template<typename INDX >
treeindexedD2node< INDX >::operator stringc (  )  const [inline]

Serialize this object by writing it out as a string.

Definition at line 568 of file treeindexedD2.h.

References treeindexedD2node< INDX >::index, treeindexedD2node< INDX >::left, and treeindexedD2node< INDX >::right.

00569 {
00570   stringstream ss;
00571   ss << index << " ";
00572   if (left)
00573   {
00574     ss << left->index;
00575 
00576     if (right)
00577     {
00578       ss << " " << right->index;
00579     }
00580     else
00581     {
00582       ss << " 0";
00583     }
00584   }
00585   else
00586   {
00587     ss << "0 ";
00588     if (right)
00589     {
00590       ss << " " << right->index;
00591     }
00592     else
00593     {
00594       ss << " 0";
00595     }
00596   }
00597 
00598   return ss.str();
00599 }

template<typename INDX>
void treeindexedD2node< INDX >::printrecursive ( string &  s,
INDX const   parentindex,
boolc  branch 
) const [inline]

Write the tree out as a linear list of nodes, where each node refers to a previous node.

For uniques then parents branch that points to this node is needed.

Definition at line 603 of file treeindexedD2.h.

00608 {
00609   s += (stringc)*this;
00610 
00611   {
00612     stringstream ss;
00613     ss << parentindex;
00614 
00615     s += " ";
00616     s += ss.str();
00617   }
00618 
00619   if (branch==false)
00620     s += " 0";
00621   else
00622     s += " 1";
00623 
00624   if ((left!=0)||(right!=0))
00625     s += '\n';
00626   if (left!=0)
00627   {
00628     if (left->isleaf()==false)
00629       left->printrecursive(s,index,false);
00630   }
00631   if (right!=0)
00632   {
00633     if (right->isleaf()==false)
00634       right->printrecursive(s,index,true);
00635   }
00636 }

template<typename INDX >
void treeindexedD2node< INDX >::swap (  )  [inline]

Swap left and right.

Definition at line 686 of file treeindexedD2.h.

References treeindexedD2node< INDX >::left, and treeindexedD2node< INDX >::right.

00687 { 
00688   treeindexedD2node * tmp=left; 
00689   right=left; 
00690   left=tmp; 
00691 }

template<typename INDX >
void treeindexedD2node< INDX >::unlink (  )  [inline]

Set the left and right pointers to zero recursively down the tree.

Definition at line 550 of file treeindexedD2.h.

References treeindexedD2node< INDX >::left, treeindexedD2node< INDX >::right, and treeindexedD2node< INDX >::unlink().

Referenced by treeindexedD2node< INDX >::unlink().

00551 {
00552   treeindexedD2node<INDX> * p;
00553   p = left;
00554   if (left!=0)
00555   {
00556     left=0;
00557     p->unlink();
00558   }
00559   p = right;
00560   if (right!=0)
00561   {
00562     right=0;
00563     p->unlink();
00564   }
00565 }


Member Data Documentation

template<typename INDX>
INDX treeindexedD2node< INDX >::index

template<typename INDX>
treeindexedD2node* treeindexedD2node< INDX >::left

template<typename INDX>
treeindexedD2node* treeindexedD2node< INDX >::right


The documentation for this class was generated from the following file:

Generated on Fri Mar 4 00:50:21 2011 for Chelton Evans Source by  doxygen 1.5.8