一
前序遍历:
设置一个栈,从根开始顺着左子树依次访问并入栈,当左子树为空时,说明当前栈顶节点的左子树访问完,应该访问栈顶节点的右子树,将其入栈,然后重复刚才的过程。
中序遍历
设置一个栈,从根开始顺着左子树依次入栈,当左子树为空时,说明当前栈顶节点的左子树访问完,此时将栈顶出栈并访问,接着访问栈顶节点的右子树,将其入栈,然后重复刚才的过程。
二
struct BTNode
{
int d;
struct BTNode* lchild;
struct BTNode* rchild;
};
struct BTnode *stack[100];
int flag[100] = {0};
int top = 0;
void preOrder(struct BTNode *root)
{
top = 0;
struct BTNode* p = root;
while (p || top > 0)
{
while (p)
{
printf("%d ", p->d);
stack[top++] = p;
p = p->lchild;
}
if (top > 0)
{
p = stack[--top];
p = p->rchild;
}
}
}
void inOrder(struct BTNode *root)
{
top = 0;
struct BTNode* p = root;
while (p || top > 0)
{
while (p)
{
stack[top++] = p;
p = p->lchild;
}
if (top > 0)
{
p = stack[--top];
printf("%d ", p->d);
p = p->rchild;
}
}
}