非遞歸算法:設置計數器
遞歸算法的路徑如下圖所示:
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;
}