#include<stdio.h>
#include <stdlib.h>
typedef struct _Tree
{
int nValue;
struct _Tree* pLeft;
struct _Tree* pRight;
}Tree; // 树的节点
void CreateTree(Tree* *tree)
{
(*tree) = (Tree*)malloc(sizeof(Tree));
(*tree)->nValue = 1;
(*tree)->pLeft = (Tree*)malloc(sizeof(Tree));
(*tree)->pLeft->nValue = 2;
(*tree)->pLeft->pLeft = (Tree*)malloc(sizeof(Tree));
(*tree)->pLeft->pLeft->nValue = 4;
(*tree)->pLeft->pLeft->pLeft = NULL;
(*tree)->pLeft->pLeft->pRight = NULL;
(*tree)->pLeft->pRight = (Tree*)malloc(sizeof(Tree));
(*tree)->pLeft->pRight->nValue = 5;
(*tree)->pLeft->pRight->pLeft = NULL;
(*tree)->pLeft->pRight->pRight = NULL;
(*tree)->pRight = (Tree*)malloc(sizeof(Tree));
(*tree)->pRight->nValue = 3;
(*tree)->pRight->pLeft = (Tree*)malloc(sizeof(Tree));
(*tree)->pRight->pLeft->nValue = 6;
(*tree)->pRight->pLeft->pLeft = NULL;
(*tree)->pRight->pLeft->pRight = NULL;
(*tree)->pRight->pRight = (Tree*)malloc(sizeof(Tree));
(*tree)->pRight->pRight->nValue = 7;
(*tree)->pRight->pRight->pLeft = NULL;
(*tree)->pRight->pRight->pRight = NULL;
}
typedef struct _Stack
{
Tree* pTree; // 装一个树的节点
struct _Stack* pNext;
}Stack;
void PushStack(Stack* *pTop,Tree* tree)
{
Stack* temp = (Stack*)malloc(sizeof(Stack));
temp->pTree = tree;
temp->pNext = (*pTop);
(*pTop) = temp;
}
Tree* PopStack(Stack* *pTop)
{
if (pTop == NULL || *pTop == NULL)
{
return NULL;
}
Stack* pDel = (*pTop);
Tree* tree = pDel->pTree;
(*pTop) = (*pTop)->pNext;
free(pDel);
pDel = NULL;
return tree;
}
void FrontPrintf(Tree* tree)
{
Stack* pTop = NULL;
while(1)
{
while(tree) // 把 tree 所有的左 放到栈
{
// 根
printf("%d ",tree->nValue);
// 左子树
PushStack(&pTop,tree);
tree = tree->pLeft;
}
// 左遍历 完了
// 通过出栈的节点 遍历右
tree = PopStack(&pTop);
if (tree == NULL) // 栈没有东西 遍历完 结束
{
return;
}
// 遍历 右子树
tree = tree->pRight;
}
}
void MidPrintf(Tree* tree)
{
Stack* pTop = NULL;
while(1)
{
while(tree) // 把 tree 所有的左 放到栈
{
// 左子树
PushStack(&pTop,tree);
tree = tree->pLeft;
}
// 左遍历 完了
// 通过出栈的节点 遍历右
tree = PopStack(&pTop);
if (tree == NULL) // 栈没有东西 遍历完 结束
{
return;
}
// 根
printf("%d ",tree->nValue);
// 遍历 右子树
tree = tree->pRight;
}
}
int main()
{
Tree* root = NULL;
CreateTree(&root);
FrontPrintf(root);
printf("\n");
MidPrintf(root);
system("pause");
return 0;
}