Aleph-w  1.5a.2
Biblioteca general de algoritmos y estructuras de datos
 Todo Clases Archivos Funciones Variables 'typedefs' Enumeraciones Amigas Grupos Páginas
avlNode.H
1 
2 # ifndef AVLNODE_H
3 # define AVLNODE_H
4 
5 # include <tpl_binNodeUtils.H>
6 
8 {
9 
10 private:
11 
12  signed char diff; // diferencia de altura
13 
14 public:
15 
16  AvlNode_Data() : diff(0) { /* EMPTY */ }
17 
18  signed char & getDiff() { return diff; }
19 
20  void reset() { diff = 0; }
21 
22 };
23 
26 
27 
28 # define DIFF(p) ((p)->getDiff())
29 
30  template <class Node>
31 bool is_avl(Node* p)
32 {
33  if (p == Node::NullPtr)
34  return true;
35 
36  if (DIFF(p) < -1 or DIFF(p) > 1)
37  return false;
38 
39  const int hL = computeHeightRec(LLINK(p));
40  const int hR = computeHeightRec(RLINK(p));
41 
42  int diff = hR - hL;
43 
44  if (diff > 1 or diff < -1)
45  return false;
46 
47  if (((int) DIFF(p)) != hR - hL)
48  return false;
49 
50  if (not is_avl(LLINK(p)))
51  return false;
52 
53  return is_avl(RLINK(p));
54 }
55 
56 # endif // AVLNODE_H
57 
Definition: avlNode.H:7
#define LLINK(p)
Definition: tpl_binNode.H:196
#define RLINK(p)
Definition: tpl_binNode.H:201
size_t computeHeightRec(Node *node)
Definition: tpl_binNodeUtils.H:778
#define DECLARE_BINNODE(Name, height, Control_Data)
Definition: tpl_binNode.H:126

Leandro Rabindranath León