知識點:後序遍歷的棧中存的就是當前所訪問節點的所有祖先,也就是路徑
void findAllAce(BiTree T,char a) {
//後序遍歷
stack<BiTNode*> s;
BiTNode *p=T, *pre=T;
while (p||!s.empty())
{
while (p)
{
s.push(p);
p = p->lchild;
}
if (!s.empty()) {
p = s.top();
if (pre == p->rchild||p->rchild == NULL) {
s.pop();
if (p->data == a) {//找到後將棧中的所有內容輸出,結束程序
while (!s.empty())
{
p = s.top();
cout << p->data << " ";
s.pop();
}
return;
}
else {
pre = p;
p = NULL;
}
}
else
{
p = p->rchild;
}
}
}
}
void WangDao_twelve(BiTree T){
cout << "請輸入要查找祖先的節點:" ;
char a;
cin >> a;
cout << a << "的祖先節點爲:";
findAllAce(T,a);
}