119 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Groff
		
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Groff
		
	
	
	
.\" $NetBSD$
 | 
						|
.\" Copyright (c) 1997 Todd C. Miller <Todd.Miller@courtesan.com>
 | 
						|
.\" All rights reserved.
 | 
						|
.\"
 | 
						|
.\" Redistribution and use in source and binary forms, with or without
 | 
						|
.\" modification, are permitted provided that the following conditions
 | 
						|
.\" are met:
 | 
						|
.\" 1. Redistributions of source code must retain the above copyright
 | 
						|
.\"    notice, this list of conditions and the following disclaimer.
 | 
						|
.\" 2. Redistributions in binary form must reproduce the above copyright
 | 
						|
.\"    notice, this list of conditions and the following disclaimer in the
 | 
						|
.\"    documentation and/or other materials provided with the distribution.
 | 
						|
.\" 3. The name of the author may not be used to endorse or promote products
 | 
						|
.\"    derived from this software without specific prior written permission.
 | 
						|
.\"
 | 
						|
.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
 | 
						|
.\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 | 
						|
.\" AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
 | 
						|
.\" THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 | 
						|
.\" EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 | 
						|
.\" PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
 | 
						|
.\" OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 | 
						|
.\" WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 | 
						|
.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 | 
						|
.\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
						|
.\"
 | 
						|
.\"	OpenBSD: tsearch.3,v 1.2 1998/06/21 22:13:49 millert Exp
 | 
						|
.\" $FreeBSD: src/lib/libc/stdlib/tsearch.3,v 1.7 2001/09/07 14:46:36 asmodai Exp $
 | 
						|
.\"
 | 
						|
.Dd June 15, 1997
 | 
						|
.Dt TSEARCH 3
 | 
						|
.Os
 | 
						|
.Sh NAME
 | 
						|
.Nm tsearch , tfind , tdelete , twalk
 | 
						|
.Nd manipulate binary search trees
 | 
						|
.Sh SYNOPSIS
 | 
						|
.In search.h
 | 
						|
.Ft void *
 | 
						|
.Fn tdelete "const void *key" "void **rootp" "int (*compar) (const void *, const void *)"
 | 
						|
.Ft void *
 | 
						|
.Fn tfind "const void *key" "void **rootp" "int (*compar) (const void *, const void *)"
 | 
						|
.Ft void *
 | 
						|
.Fn tsearch "const void *key" "void **rootp" "int (*compar) (const void *, const void *)"
 | 
						|
.Ft void
 | 
						|
.Fn twalk "const void *root" "void (*compar) (const void *, VISIT, int)"
 | 
						|
.Sh DESCRIPTION
 | 
						|
The
 | 
						|
.Fn tdelete ,
 | 
						|
.Fn tfind ,
 | 
						|
.Fn tsearch ,
 | 
						|
and
 | 
						|
.Fn twalk
 | 
						|
functions manage binary search trees based on algorithms T and D
 | 
						|
from Knuth (6.2.2).  The comparison function passed in by
 | 
						|
the user has the same style of return values as
 | 
						|
.Xr strcmp 3 .
 | 
						|
.Pp
 | 
						|
.Fn Tfind
 | 
						|
searches for the datum matched by the argument
 | 
						|
.Fa key
 | 
						|
in the binary tree rooted at
 | 
						|
.Fa rootp ,
 | 
						|
returning a pointer to the datum if it is found and NULL
 | 
						|
if it is not.
 | 
						|
.Pp
 | 
						|
.Fn Tsearch
 | 
						|
is identical to
 | 
						|
.Fn tfind
 | 
						|
except that if no match is found,
 | 
						|
.Fa key
 | 
						|
is inserted into the tree and a pointer to it is returned.  If
 | 
						|
.Fa rootp
 | 
						|
points to a NULL value a new binary search tree is created.
 | 
						|
.Pp
 | 
						|
.Fn Tdelete
 | 
						|
deletes a node from the specified binary search tree and returns
 | 
						|
a pointer to the parent of the node to be deleted.
 | 
						|
It takes the same arguments as
 | 
						|
.Fn tfind
 | 
						|
and
 | 
						|
.Fn tsearch .
 | 
						|
If the node to be deleted is the root of the binary search tree,
 | 
						|
.Fa rootp
 | 
						|
will be adjusted.
 | 
						|
.Pp
 | 
						|
.Fn Twalk
 | 
						|
walks the binary search tree rooted in
 | 
						|
.Fa root
 | 
						|
and calls the function
 | 
						|
.Fa action
 | 
						|
on each node.
 | 
						|
.Fa Action
 | 
						|
is called with three arguments: a pointer to the current node,
 | 
						|
a value from the enum
 | 
						|
.Sy "typedef enum { preorder, postorder, endorder, leaf } VISIT;"
 | 
						|
specifying the traversal type, and a node level (where level
 | 
						|
zero is the root of the tree).
 | 
						|
.Sh SEE ALSO
 | 
						|
.Xr bsearch 3 ,
 | 
						|
.Xr hsearch 3 ,
 | 
						|
.Xr lsearch 3
 | 
						|
.Sh RETURN VALUES
 | 
						|
The
 | 
						|
.Fn tsearch
 | 
						|
function returns NULL if allocation of a new node fails (usually
 | 
						|
due to a lack of free memory).
 | 
						|
.Pp
 | 
						|
.Fn Tfind ,
 | 
						|
.Fn tsearch ,
 | 
						|
and
 | 
						|
.Fn tdelete
 | 
						|
return NULL if
 | 
						|
.Fa rootp
 | 
						|
is NULL or the datum cannot be found.
 | 
						|
.Pp
 | 
						|
The
 | 
						|
.Fn twalk
 | 
						|
function returns no value.
 |