From 27101c7b64409abfa493e64bed5de72ac84bb1ce Mon Sep 17 00:00:00 2001 From: goodale Date: Mon, 5 Jul 1999 09:01:57 +0000 Subject: Latest changes for the ActiveThorns. Tom git-svn-id: http://svn.cactuscode.org/flesh/trunk@649 17b73243-c579-4c4c-a9d2-2d5706c11dac --- src/util/SKBinTree.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'src/util') diff --git a/src/util/SKBinTree.c b/src/util/SKBinTree.c index 64834401..fb55d5bf 100644 --- a/src/util/SKBinTree.c +++ b/src/util/SKBinTree.c @@ -4,6 +4,8 @@ @author Tom Goodale @desc Routines to deal with binary trees keyed by strings. + The tree is a threaded tree, i.e. it can also be + traversed, inorder, like a linked list. @enddesc @@*/ @@ -47,6 +49,7 @@ t_sktree *SKTreeStoreData(t_sktree *root, t_sktree *subtree, { subtree->left=NULL; subtree->right=NULL; + subtree->next=NULL; subtree->data = data; @@ -57,10 +60,13 @@ t_sktree *SKTreeStoreData(t_sktree *root, t_sktree *subtree, if((order = STR_CMP(key, root->key)) < 0) { root->left = subtree; + subtree->next = root ; } else { root->right = subtree; + subtree->next = root->next; + root->next = subtree; } } } @@ -206,6 +212,20 @@ void SKTreePrintNodes(t_sktree *root, int depth, void (*print_node)(void *, int) } + /*@@ + @routine SKTreeFindNode + @date Mon Jul 5 10:09:30 1999 + @author Tom Goodale + @desc + Finds a given node in the tree. + @enddesc + @calls + @calledby + @history + + @endhistory + +@@*/ t_sktree *SKTreeFindNode(t_sktree *root, const char *key) { int order; @@ -237,6 +257,28 @@ t_sktree *SKTreeFindNode(t_sktree *root, const char *key) return node; } + /*@@ + @routine SKTreeFindFirst + @date Mon Jul 5 10:09:57 1999 + @author Tom Goodale + @desc + Finds the first node in the tree (the leftmost one). + @enddesc + @calls + @calledby + @history + + @endhistory + +@@*/ +t_sktree *SKTreeFindFirst(t_sktree *root) +{ + for(; root->left ; root = root->left); + + return root; +} + + /*@@ -- cgit v1.2.3