public
class
BinaryTreeNode
{
public
BinaryTreeNode Left {
get
;
set
; }
public
BinaryTreeNode Right {
get
;
set
; }
public
int
Data {
get
;
set
; }
public
BinaryTreeNode(
int
data)
{
this
.Data = data;
}
}
public
enum
TreeTraversal
{
PREORDER,
INORDER,
POSTORDER
}
public
void
PrintTree(BinaryTreeNode root, TreeTraversal treeTraversal)
{
Action printValue =
delegate
(
int
v)
{
Console.Write(v +
" "
);
};
switch
(treeTraversal)
{
case
TreeTraversal.PREORDER:
PreOrderTraversal(printValue, root);
break
;
case
TreeTraversal.INORDER:
InOrderTraversal(printValue, root);
break
;
case
TreeTraversal.POSTORDER:
PostOrderTraversal(printValue, root);
break
;
default
:
break
;
}
}
public
void
PreOrderTraversal(Action action, BinaryTreeNode root)
{
if
(root ==
null
)
return
;
action(root.Data);
PreOrderTraversal(action, root.Left);
PreOrderTraversal(action, root.Right);
}
public
void
InOrderTraversal(Action action, BinaryTreeNode root)
{
if
(root ==
null
)
return
;
InOrderTraversal(action, root.Left);
action(root.Data);
InOrderTraversal(action, root.Right);
}
public
void
PostOrderTraversal(Action action, BinaryTreeNode root)
{
if
(root ==
null
)
return
;
PostOrderTraversal(action, root.Left);
PostOrderTraversal(action, root.Right);
action(root.Data);
}