#include <stdio.h>
int main(){
// int a[5][4]={{1,1,2},{2,-1,-1},{3,-1,-1}};
// int a[5][4]={{1,1,2},{2,3,4},{3,-1,-1},{4,-1,-1},{5,-1,-1}};
int a[5][4]={{1,1,2},{2,3,-1},{3,-1,-1},{4,-1,-1},{}};
// int a[5][4]={{1,1,2},{2,-1,4},{3,-1,-1},{},{5,-1,-1}};
// int a[5][4]={{1,1,2},{2,-1,-1},{3,3,4},{4,-1,-1},{5,-1,-1}};
//int a[5][4]={{1,1,2},{2,-1,-1},{3,-1,4},{},{5,-1,-1}};
// int a[5][4]={{1,1,2},{2,-1,-1},{3,3,-1},{4,-1,-1},{}};
int stack[5];
int stackOffset=0;
stack[stackOffset++]=0;
while(stackOffset>0){
int *tmp=a[stack[stackOffset-1]];
int leftIndex=*(tmp+1);
int rightIndex=*(tmp+2);
if( leftIndex==-1|| *(tmp+3)==1){
printf("%d\n",*(tmp+0));
stackOffset-=1;
if( rightIndex!=-1){
stack[stackOffset++]=rightIndex;
}
}
else{
while(leftIndex!=-1 ){
a[stack[stackOffset-1]][3]=1;//标志左子树即将入栈
stack[stackOffset++]=leftIndex;
leftIndex=a[leftIndex][1];
}
}
}
return 0;
}
中序遍历二叉树示例
最新推荐文章于 2024-04-23 15:46:26 发布