File: tree.c

package info (click to toggle)
abuse 2.00-11
  • links: PTS
  • area: main
  • in suites: hamm
  • size: 12,708 kB
  • ctags: 15,389
  • sloc: ansic: 115,852; cpp: 6,792; lisp: 2,066; sh: 1,734; makefile: 1,601; asm: 264
file content (79 lines) | stat: -rw-r--r-- 1,691 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <stdio.h>
#include <stdlib.h>

class btnode
{
protected :
  btnode *Left, *Right;
public :
	  btnode *left()                   { return Left; }
	  btnode *right()                  { return Right; }
	  void    set_right(btnode *right) { Right=right; }
	  void    set_left (btnode *left)  { Left=left;   }
  virtual int     compare  (btnode *node) = 0;
  virtual char   *name     ()             = 0;
} ;

class btree
{
  void reprint(btnode *n);
protected :
  btnode *root;
public :
	       btree() { root=NULL; }
  virtual void insert(btnode *node);
  virtual void remove(btnode *node);
  void         print() { reprint(root); }
} ;

void btree::insert(btnode *node)
{ btnode *parent,*finder;
  int from_left;
  node->set_right(NULL); node->set_left(NULL);
  if (root)
  { finder=root;
    while (finder)
    { parent=finder;
      if (finder->compare(node)>0)
      { from_left=1; finder=finder->left(); }
      else
      { from_left=0; finder=finder->right(); }
    }
    if (from_left)
      parent->set_left(node);
    else
      parent->set_right(node);
  } else root=node;
}

void btree::remove(btnode *node)
{
}

void btree::reprint(btnode *n)
{
  if (n)
  { reprint(n->left());
    printf("%s\n",n->name());
    reprint(n->right());
  }
}

class btnumber : public btnode
{
  int num;
public :
  btnumber(int x) { num=x; }
  virtual int     compare  (btnode *node)
    { if (num<((btnumber *)node)->num) return -1;
      else return (num> ((btnumber *)node)->num); }
  virtual char   *name     ()
    { static char st[20]; sprintf(st,"%d",num); return st;}
} ;

main()
{
  btree bt;
  for (int i=0;i<20;i++)
    bt.insert((btnode *) new btnumber(random(500)));
  bt.print();