/** 二叉树的二叉链表节点结构定义*/
typedef struct BiTNode{
TElemType data; // 节点数据
struct BiTNode *left, *right; //左右子树指针
}BiTNode, *BiTree;
/** 前序遍历 */
// 递归
void PreOrderTraverse(BiTree T)
{
if (T == NULL)
return ;
printf("%d", T->data);
PreOrderTraverse(T->left);// 函数内不停地调用了自身, 一次函数调用完成后会返回上一层, 直至第一层
PreOrderTraverse(T->right); // 然后再开始右子树的前序遍历
}
// 非递归
void PreOrderTraverse(BiTree T)
{
InitStack(S); // 初始化一个空栈
Push(S, T); // 根指针进栈
while (!StackEmpty(S))
{
while (GetTop(S, p) && p)
{
printf("%d", p->data); // 访问节点
Push(S, p->left); // 左子树走到尽头
}
Pop(S, p); // 空指针出栈
if (!StackEmpty(S))
{
Pop(S, p);
Push(S, p->right);
}
}
}