【數據結構】-樹-查找某節點的所有祖先

知識點:後序遍歷的棧中存的就是當前所訪問節點的所有祖先,也就是路徑

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);
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章