首先嘛 中序 的打印顺序是 左根右 的
其实 中序 和先序的 方法大致相同
所有对于
递归
//中序遍历 递归
void print1(struct node*root)
{
if(root!=NULL)
{
print1(root->left); //用他的左边在调用方法 (左)
printf("%d\t",root->data);//打印 (根)
print1(root->right); //用他的右边在调用方法 (右)
}
}
递归就是反复的调用自己的过程
非递归
//中序遍历 非递归
void print(struct node*root)
{
struct node*a[20]; //建立一个结构体数组
struct node*pnode=root; //然后定义一个结构体指针好做下面的操作
int i=-1;
while(pnode||i!=-1)
{
while(pnode) //当节点不为空
{
a[++i]=pnode; // 入栈
pnode=pnode->left;
}
if(i!=-1) // 无路可走的时候
{
pnode=a[i--]; //出栈
printf("%d\t",pnode->data);