diff --git a/ALTree/Nanova.pm b/ALTree/Nanova.pm
index c7a9db150e9b5301f730c4a30753fa247e1e3a91..503ee6e63fecc183362d3eaf45372452d645b723 100644
--- a/ALTree/Nanova.pm
+++ b/ALTree/Nanova.pm
@@ -29,26 +29,45 @@ use Data::Dumper;
 
 sub Tree2mat
 {
-    my $present_node = shift; 
-    my $vect = shift; # structure transitoire: chemin de la racine à une feuille
-    my $mat = shift; # The matrix which is filled by the function
-    
-    if ($present_node->NbChildren()==0)  {
-	push (@{$mat}, $vect);
-    } else {
-	my $number=0;
-	for my $child ($present_node->GetChildrenList()) {  
-	    push(@{$vect}, $number);
-	    $number ++;
-	    Tree2mat($present_node, $vect, $mat);
-	}
+    my $present_node = shift;
+    my @vect=(); # dernier chenin parcouru
+    my @mat;
+    my $height=$present_node->{"height"};
+
+    print STDERR "heigh=", $present_node->{"height"}, "\n";
+    for (my $i=0; $i<$height; $i++) {
+	push(@vect, -1);
     }
+
+    my $tree2mat;
+    $tree2mat = sub {
+	my $present_node = shift;
+
+	if ($present_node->NbChildren()==0)  {
+	    for (my $i=$present_node->{"level"}; $i<$height; $i++) {
+		$vect[$i]++;
+	    }
+	    my @tab=@vect;
+	    push (@mat, \@tab);
+	} else {
+	    for my $child ($present_node->GetChildrenList()) {  
+		$vect[$present_node->{"level"}]++;
+		$tree2mat->($child);
+	    }
+	}
+    };
+    $tree2mat->($present_node);
+    return \@mat;
 }
 
 sub WriteMat
 {
+
     my $mat = shift;
-    
+
+    print STDERR Dumper($mat);
+
+    return;
     for (my $i=0; $i<=$#$mat; $i++)  {
 	foreach my $elem (@{$mat->[$i]}) {
 	    print $elem, "\t";
diff --git a/ALTree/Tree.pm b/ALTree/Tree.pm
index ced07395320f9b227825aff327e18ec9192a7f0b..5e877797995fc29369789de5f80e7943a5ac9474 100644
--- a/ALTree/Tree.pm
+++ b/ALTree/Tree.pm
@@ -183,15 +183,17 @@ sub FillHeight
     my $set_height;
     $set_height=sub {
 	my($present_node)=shift;
-	my($height)=shift;
+	my($height)=0;
 	my($child);
-	$height+=1;
 	foreach $child (@{$present_node->{"children"}}) { 
-	    $set_height->($child, $height);
+	    my $min_height=$set_height->($child)+1;
+	    if ($min_height > $height) {
+		$height=$min_height;
+	    }
 	}
 	$present_node->{"height"}=$height;
     };
-    $set_height->($self->GetRoot(), 0);
+    $set_height->($self->GetRoot());
 }    
 
 sub GetLevel0 {
diff --git a/altree b/altree
index 689f33f408dcbdb4ec0bcd5ac537bec8735463a7..25e295748547d5f9384bb29f1a66729ad1b02571 100755
--- a/altree
+++ b/altree
@@ -1517,10 +1517,9 @@ sub main
 		my @children=$racine->GetChildrenList();
 		
 		{
-		    my $vect=();
-		    my $mat=();
+		    my $mat;
 		    print "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT\n";
-		    ALTree::Nanova::Tree2mat($tree->GetRoot(),$vect, $mat);
+		    $mat=ALTree::Nanova::Tree2mat($tree->GetRoot());
 		    ALTree::Nanova::WriteMat($mat);