63 if (bin_node ==
nullptr)
66 Tree_Node<Key> * child =
new Tree_Node<Key>(
KEY(bin_node));
68 tree->insert_leftmost_child(child);
75 if (bin_node ==
nullptr)
78 Tree_Node<Key> * sibling =
new Tree_Node<Key>(
KEY(bin_node));
80 tree->insert_right_sibling(sibling);
91 Tree_Node<Key> * left_child = tree->get_left_child();
95 Tree_Node<Key> * right_sibling = tree->get_right_sibling();
100 template <
class Key> Tree_Node<Key> *
106 Tree_Node<Key> * tree =
new Tree_Node<Key> (
KEY(bn));
121 return c < 10 ? c+
'0' :
'A' + c -10;
128 char * ret_val = result;
129 char * src_str=
static_cast<char *
> (src_data);
131 for(
int i=0;i<src_size; i++)
133 two_nibbles= *
reinterpret_cast<Two_Nibbles*
>(src_str);
144 return c < 58 ? c -
'0' : c -
'A' + 10;
151 char * result_str =
static_cast<char*
> (result);
153 for(
int i=0;i<src_size; i++)
159 char *character =
reinterpret_cast<char*
>(&two_nibbles);
160 *result_str++ = *character;
170 template <
class Node,
class T>
inline static
174 if (node == Node::NullPtr)
179 Dnode<T> * lnodo =
new Dnode<T>(pi);
184 lnodo->get_data().inorder_pos=pos;
190 template <
class Key>
void
195 Dlist<pre_in<Key> >
l;
198 size_t size=
sizeof(
KEY(
root));
201 output_stream<<cardinality<<endl;
202 output_stream<<size<<endl;
204 Dlist<pre_in<Key> >::Iterator a(
l);
205 for(a.reset_first(); a.has_curr(); a.next_ne())
207 stringficate(
reinterpret_cast<void *
>(&(a.get_curr()->get_data().data)),size,buffer)
210 for(a.reset_first();a.has_curr();a.next_ne())
211 output_stream<<a.get_curr()->get_data().inorder_pos+1<<endl;
218 DynArray<Key>&
inorder,
int inf_i,
int sup_i)
223 assert(inf_i > sup_i);
227 assert(sup_p - inf_p == sup_i - inf_i);
232 for (
int j = inf_i; j <= sup_i; j++)
242 inorder, inf_i, inf_i + (i - 1));
245 inorder, inf_i + i + 1, sup_i);
257 input_stream>>cardinality;
260 char buffer[size*2+1];
261 char str_data[size*2+1];
263 DynArray<Key>
preorder(cardinality);
264 DynArray<Key>
inorder(cardinality);
266 for(
int i = 0; i< cardinality ; i++){
267 input_stream>>buffer;
269 preorder[i] = *
reinterpret_cast<Key *
>(str_data);
272 for(
int i = 0; i < cardinality; i++){
277 return build_tree<Key>(
preorder,0,cardinality-1,
inorder,0,cardinality-1);
WeightedDigraph::Node Node
EepicNode< long > * build_tree()
T & append(const T &item)
Append a new item by copy.
Basic binary node with no extra control data.
BinNode< Key > * forest_to_bin(Tree_Node< Key > *root)
void destringficate(void *result, size_t src_size, char *src_data)
char nibble_to_char(unsigned char c)
Tree_Node< Key > * bin_to_forest(BinNode< Key > *bn)
void insert_child(BinNode< Key > *bin_node, Tree_Node< Key > *&tree)
char * stringficate(void *src_data, size_t src_size, char *result)
BinNode< Key > * read_from_stream(ifstream &input_stream)
void write_to_stream(BinNode< Key > *root, ofstream &output_stream)
int char_to_nibble(unsigned char c)
void insert_sibling(BinNode< Key > *bin_node, Tree_Node< Key > *&tree)
void bin_to_tree(BinNode< Key > *bn, Tree_Node< Key > *&tree)
static void get_pre_in_list(Node *node, Dlist< T > &l, int &pos)
__gmp_expr< T, __gmp_binary_expr< __gmp_expr< T, U >, unsigned long int, __gmp_root_function > > root(const __gmp_expr< T, U > &expr, unsigned long int l)
Basic binary tree node definitions.
void preorder(int v[], int n, int i)
Write preorder traversal of heap.
void inorder(int v[], int n, int i)
Write inorder traversal of heap.