例如二叉树
a
b c
d e
f
打印为
c
f
e
a
d
b
编程思想为利用堆栈实现RVL的遍历,同时利用一个int堆栈存储对应节点的高度。
void printStruct2(BinaryTreeNode *t)
{BinaryTreeNode *stack[100];
BinaryTreeNode *n;
int height[100];
int index=0;
int parheight=0;
int i;
stack[index]=t;
height[index]=0;
while(index>=0)
{
while(stack[index]->right)
{
n=stack[index]->right;
parheight=height[index];
stack[index+1]=n;
height[index+1]=parheight+1;
index++;
}
//访问所有没有左子节点的节点
while(!stack[index]->left&&index>0)
{
for(i=0;i<height[index];i++)
printf(" ");
printf("%c\n",stack[index]->data);
index--;
}
//访问第一个有左子节点的节点
for(i=0;i<height[index];i++)
printf(" ");
printf("%c\n",stack[index]->data);
//index--;
//将左子节点压入堆栈,正好占用其父节点的位置
if(index>=0&&stack[index]->left)
{
stack[index]=stack[index]->left;
height[index]+=1;
}
else index--;
}
}