遍历用递归实现的话比较简单,三种遍历换一下访问的顺序即可。
void Preorder(BinaryTreeNode *t)
{
if(t)
{
printf("%c ",t->data);
Preorder(t->left);
Preorder(t->right);
}
}
void Inorder(BinaryTreeNode *t)
{
if(t)
{
Inorder(t->left);
printf("%c ",t->data);
Inorder(t->right);
}
}
利用非递归的办法实现稍微复杂一点,下边是前序遍历的代码,主要思想就是保存右指针指向的节点到一个堆栈里,然后向极左访问。
oid Nlr(BinaryTreeNode *t)
{
BinaryTreeNode *stack[100];
BinaryTreeNode *n;
int index=0;
stack[index]=t;
while(index>=0)
{
n=stack[index--];
do
{
printf("%c ",n->data);
if(n->right)
stack[++index]=n->right;
n=n->left;
}while(n);
}
}