【數據結構】-樹-先序遍歷中第k個節點的值

非遞歸算法:設置計數器

遞歸算法的路徑如下圖所示: 

 


char find_pre_k(BiTree T,int k) {
	stack<BiTree> s;
	BiTNode* p = T;
	int count = 0;
	while (p||!s.empty())
	{
		if (p) {	
			count++;
			if (count == k) return p->data;
			s.push(p);
			p = p->lchild;
		}
		else {
			p = s.top();
			s.pop();
			p = p->rchild;
		}
	}
}
int i = 1;
char find_pre_k_DG(BiTree T,int k) {
	char a;
	if (T == NULL) return '#';
	if (i == k)return T->data;
	i++;
	a = find_pre_k_DG(T->lchild, k);
	if (a != '#')return a;
	a= find_pre_k_DG(T->rchild, k);
	return a;
}
void ten_4_3(BiTree T) {
	//先序遍歷中第k個節點的值
	int k;
	cout << endl;
	cout << "---------------------------" << endl;
	cout << "先序遍歷中第k個節點的值:請輸入k的值:";
	cin >> k;
	cout << "非遞歸算法:"<<find_pre_k(T,k)<<endl;
	cout << "非遞歸算法:" << find_pre_k_DG(T, k) << endl;
	
}

 

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