1 /* perms.c */
2
3 #include "../Tree.h"
4
5 /*--------------------------------------------------------------------*/
6 /*
7 --------------------------------------
8 fill the new-to-old permutation vector
9
10 created -- 95nov15, cca
11 --------------------------------------
12 */
13 void
Tree_fillNewToOldPerm(Tree * tree,int newToOld[])14 Tree_fillNewToOldPerm (
15 Tree *tree,
16 int newToOld[]
17 ) {
18 int i, v ;
19 /*
20 ---------------
21 check the input
22 ---------------
23 */
24 if ( tree == NULL || tree->n < 1 || newToOld == NULL ) {
25 fprintf(stderr, "\n fatal error in Tree_fillNewToOldPerm(%p,%p)"
26 "\n bad input\n", tree, newToOld) ;
27 exit(-1) ;
28 }
29 /*
30 -----------------------------------------------
31 post-order traversal to fill permutation vector
32 -----------------------------------------------
33 */
34 for ( v = Tree_postOTfirst(tree), i = 0 ;
35 v != -1 ;
36 v = Tree_postOTnext(tree, v) ) {
37 newToOld[i++] = v ;
38 }
39 return ; }
40
41 /*--------------------------------------------------------------------*/
42 /*
43 --------------------------------------
44 fill the old-to-new permutation vector
45
46 created -- 95nov15, cca
47 --------------------------------------
48 */
49 void
Tree_fillOldToNewPerm(Tree * tree,int oldToNew[])50 Tree_fillOldToNewPerm (
51 Tree *tree,
52 int oldToNew[]
53 ) {
54 int i, v ;
55 /*
56 ---------------
57 check the input
58 ---------------
59 */
60 if ( tree == NULL || tree->n < 1 || oldToNew == NULL ) {
61 fprintf(stderr, "\n fatal error in Tree_fillOldToNewPerm(%p,%p)"
62 "\n bad input\n", tree, oldToNew) ;
63 exit(-1) ;
64 }
65 /*
66 -----------------------------------------------
67 post-order traversal to fill permutation vector
68 -----------------------------------------------
69 */
70 for ( v = Tree_postOTfirst(tree), i = 0 ;
71 v != -1 ;
72 v = Tree_postOTnext(tree, v) ) {
73 oldToNew[v] = i++ ;
74 }
75 return ; }
76
77 /*--------------------------------------------------------------------*/
78 /*
79 ------------------------------------------------------
80 fill the new-to-old and old-to-new permutation vectors
81
82 created -- 95nov15, cca
83 ------------------------------------------------------
84 */
85 void
Tree_fillBothPerms(Tree * tree,int newToOld[],int oldToNew[])86 Tree_fillBothPerms (
87 Tree *tree,
88 int newToOld[],
89 int oldToNew[]
90 ) {
91 int i, v ;
92 /*
93 ---------------
94 check the input
95 ---------------
96 */
97 if ( tree == NULL || tree->n < 1
98 || newToOld == NULL || oldToNew == NULL ) {
99 fprintf(stderr, "\n fatal error in Tree_fillBothPerms(%p,%p,%p)"
100 "\n bad input\n", tree, newToOld, oldToNew) ;
101 exit(-1) ;
102 }
103 /*
104 ------------------------------------------------
105 post-order traversal to fill permutation vectors
106 ------------------------------------------------
107 */
108 for ( v = Tree_postOTfirst(tree), i = 0 ;
109 v != -1 ;
110 v = Tree_postOTnext(tree, v) ) {
111 newToOld[i] = v ;
112 oldToNew[v] = i++ ;
113 }
114 return ; }
115
116 /*--------------------------------------------------------------------*/
117