summaryrefslogtreecommitdiff
path: root/tree
diff options
context:
space:
mode:
Diffstat (limited to 'tree')
-rw-r--r--tree/src/main.adb14
-rw-r--r--tree/src/tree.adb12
-rw-r--r--tree/src/tree.ads18
-rw-r--r--tree/tree.gpr5
4 files changed, 49 insertions, 0 deletions
diff --git a/tree/src/main.adb b/tree/src/main.adb
new file mode 100644
index 0000000..b9ece1a
--- /dev/null
+++ b/tree/src/main.adb
@@ -0,0 +1,14 @@
1with Ada.Text_IO; use Ada.Text_IO;
2
3with Tree;
4
5procedure Main is
6 package IntTree is new Tree (Integer);
7 T : IntTree.Tree_Access := new IntTree.Tree;
8begin
9 T.Left := new IntTree.Tree;
10 T.Right := new IntTree.Tree;
11 T.Right.Left := new IntTree.Tree;
12
13 Put_Line ("Tree height:" & IntTree.Height (T)'Image);
14end Main;
diff --git a/tree/src/tree.adb b/tree/src/tree.adb
new file mode 100644
index 0000000..7e4a897
--- /dev/null
+++ b/tree/src/tree.adb
@@ -0,0 +1,12 @@
1package body tree is
2
3 function Height (T : Tree_Access) return Integer is
4 begin
5 if T = null then
6 return 0;
7 else
8 return 1 + Integer'Max (Height (T.Left), Height (T.Right));
9 end if;
10 end Height;
11
12end tree;
diff --git a/tree/src/tree.ads b/tree/src/tree.ads
new file mode 100644
index 0000000..1cf26fc
--- /dev/null
+++ b/tree/src/tree.ads
@@ -0,0 +1,18 @@
1generic
2 type T is private;
3
4package tree is
5
6 type Tree;
7 type Tree_Access is access Tree;
8
9 type Tree is record
10 Val : T;
11 Left : Tree_Access;
12 Right : Tree_Access;
13 end record;
14
15 -- Returns the height of the tree.
16 function Height (T : Tree_Access) return Integer;
17
18end tree;
diff --git a/tree/tree.gpr b/tree/tree.gpr
new file mode 100644
index 0000000..bef680a
--- /dev/null
+++ b/tree/tree.gpr
@@ -0,0 +1,5 @@
1project Tree is
2 for Source_Dirs use ("src");
3 for Object_Dir use "obj";
4 for Main use ("main.adb");
5end Tree;