/* Visit是对结点操作的应用函数 按某种次序对T的每个结点调用函数Visit一次至多次,一旦失败则返回 */
int BiTreePreOrderTraverse(struct bitree_t *tree, BITREE_VISIT_CB visit)
{
/* 利用栈实现先序遍历 */
struct bitree_node_t *stack[BITREE_MAX_HEIGHT] = {0};
int top = -1;
struct bitree_node_t *node = NULL;
if ((NULL == tree) || (NULL == tree->root))
{
return 0;
}
stack[++top] = tree->root;
while (top >= 0)
{
node = stack[top--];
visit(node);
if (node->rchild)
{
stack[++top] = node->rchild;
}
if (node->lchild)
{
stack[++top] = node->lchild;
}
}
return 0;
}
//中序遍历
int BiTreeInOrderTraverse(struct bitree_t *tree, BITREE_VISIT_CB visit)
{
/* 利用栈实现中序遍历 */
struct bitree_node_t *stack[BITREE_MAX_HEIGHT] = {0};
int top = -1;
st