Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F86066781
poemsnodelib.h
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Fri, Oct 4, 01:30
Size
4 KB
Mime Type
text/x-c
Expires
Sun, Oct 6, 01:30 (1 d, 23 h)
Engine
blob
Format
Raw Data
Handle
21124113
Attached To
rLAMMPS lammps
poemsnodelib.h
View Options
/*
*_________________________________________________________________________*
* POEMS: PARALLELIZABLE OPEN SOURCE EFFICIENT MULTIBODY SOFTWARE *
* DESCRIPTION: SEE READ-ME *
* FILE NAME: poemsnodelib.h *
* AUTHORS: See Author List *
* GRANTS: See Grants List *
* COPYRIGHT: (C) 2005 by Authors as listed in Author's List *
* LICENSE: Please see License Agreement *
* DOWNLOAD: Free at www.rpi.edu/~anderk5 *
* ADMINISTRATOR: Prof. Kurt Anderson *
* Computational Dynamics Lab *
* Rensselaer Polytechnic Institute *
* 110 8th St. Troy NY 12180 *
* CONTACT: anderk5@rpi.edu *
*_________________________________________________________________________*/
#ifndef NODELIB_H
#define NODELIB_H
#include <iostream>
using
namespace
std
;
TreeNode
*
GetTreeNode
(
int
item
,
TreeNode
*
lptr
=
NULL
,
TreeNode
*
rptr
=
NULL
);
void
FreeTreeNode
(
TreeNode
*
p
);
void
Postorder
(
TreeNode
*
t
,
void
visit
(
TreeNode
*
&
t
));
void
Preorder
(
TreeNode
*
t
,
void
visit
(
TreeNode
*
&
t
));
void
CountLeaf
(
TreeNode
*
t
,
int
&
count
);
int
Depth
(
TreeNode
*
t
);
void
IndentBlanks
(
int
num
);
void
PrintTree
(
TreeNode
*
t
,
int
level
);
// ---------------- Global functions-----------------//
// postorder recursive scan of the nodes in a tree
void
Postorder
(
TreeNode
*
t
,
void
visit
(
TreeNode
*
&
t
))
{
// the recursive scan terminates on a empty subtree
if
(
t
!=
NULL
)
{
Postorder
(
t
->
Left
(),
visit
);
// descend left
Postorder
(
t
->
Right
(),
visit
);
// descend right
visit
(
t
);
// visit the node
}
}
// preorder recursive scan of the nodes in a tree
void
Preorder
(
TreeNode
*
t
,
void
visit
(
TreeNode
*
&
t
))
{
// the recursive scan terminates on a empty subtree
if
(
t
!=
NULL
)
{
visit
(
t
);
// visit the node
Preorder
(
t
->
Left
(),
visit
);
// descend left
Preorder
(
t
->
Right
(),
visit
);
// descend right
}
}
//create TreeNode object with pointer fields lptr and rptr
// The pointers have default value NULL
TreeNode
*
GetTreeNode
(
int
item
,
TreeNode
*
lptr
,
TreeNode
*
rptr
)
{
TreeNode
*
p
;
// call new to allocate the new node
// pass parameters lptr and rptr to the function
p
=
new
TreeNode
(
item
,
lptr
,
rptr
);
// if insufficient memory, terminatewith an error message
if
(
p
==
NULL
)
{
cerr
<<
"Memory allocation failure!
\n
"
;
exit
(
1
);
}
// return the pointer to the system generated memory
return
p
;
}
// deallocate dynamic memory associated with the node
void
FreeTreeNode
(
TreeNode
*
p
)
{
delete
p
;
}
// the function uses the postorder scan. a visit
// tests whether the node is a leaf node
void
CountLeaf
(
TreeNode
*
t
,
int
&
count
)
{
//use postorder descent
if
(
t
!=
NULL
)
{
CountLeaf
(
t
->
Left
(),
count
);
// descend left
CountLeaf
(
t
->
Right
(),
count
);
// descend right
// check if node t is a leaf node (no descendants)
// if so, increment the variable count
if
(
t
->
Left
()
==
NULL
&&
t
->
Right
()
==
NULL
)
count
++
;
}
}
// the function uses the postorder scan. it computes the
// depth of the left and right subtrees of a node and
// returns the depth as 1 + max(depthLeft,depthRight).
// the depth of an empty tree is -1
int
Depth
(
TreeNode
*
t
)
{
int
depthLeft
,
depthRight
,
depthval
;
if
(
t
==
NULL
)
depthval
=
-
1
;
else
{
depthLeft
=
Depth
(
t
->
Left
());
depthRight
=
Depth
(
t
->
Right
());
depthval
=
1
+
(
depthLeft
>
depthRight
?
depthLeft
:
depthRight
);
}
return
depthval
;
}
void
IndentBlanks
(
int
num
)
{
// const int indentblock = 6;
for
(
int
i
=
0
;
i
<
num
;
i
++
)
cout
<<
" "
;
}
void
PrintTree
(
TreeNode
*
t
,
int
level
)
{
//print tree with root t, as long as t!=NULL
if
(
t
!=
NULL
)
{
int
indentUnit
=
5
;
// print right branch of tree t
PrintTree
(
t
->
Right
(),
level
+
1
);
// indent to current level; output node data
IndentBlanks
(
indentUnit
*
level
);
cout
<<
t
->
GetData
()
<<
endl
;
// print left branch of tree t
PrintTree
(
t
->
Left
(),
level
+
1
);
}
}
#endif
Event Timeline
Log In to Comment