二叉树后序遍历(祖先结点)@TOC
#`#include <stdio.h>
#include<stdlib.h>
typedef struct BiTNode{
int data;//数据域
struct BiTNode *lchild,*rchild;//左右孩子指针
}BiTNode,*BiTree;
typedef struct{
BiTree t;
int tag;
}stack;
void search(BiTree T,int x)
{
stack s[20];
int top = -1;
while(top > -1 || T != NULL){
while(T != NULL){
top++;
s[top].t = T;
s[top].tag = 0;
T = T->lchild;
}//while
while(top != -1 && s[top].tag == 1)
{
//出栈访问时要先访问再出栈,先printf再top–
//printf("%d\n",s[top].t->data);
/****叶子结点的所有祖先
if(!(s[top].t->lchild && s[top].t->rchild)){
for(int i = top - 1;i >-1;i–)
{
printf("%d",s[i].t->data);//要用i不能用top
}
printf("\n");
}//if
****/
/*****所找节点的祖先
if(s[top].t->data == x)
{
for(int i = top;i > -1;i–)
{
printf("%d",s[i].t->data);
}
}
*******/
top–;
}
if(top != -1){
s[top].tag = 1;
T = s[top].t->rchild;
}
}
}`