我为BST编写了类,用C ++编写了队列。 我必须以预先顺序的方式遍历BST,并在遍历到队列后添加(put)值。值是段(几何对象)的其他类。遍历和添加到队列功能的BST单独工作。 但是我的值不会被推入队列 这是我遍历BST的代码:
//Prefix traversal functions
template <class T>
queue<T> Binary_tree <T>::prefix_trav(queue<T> abc, node *Bnode) {
if (Bnode != NULL) {
abc.addQ (Bnode - data);
prefix_trav (abc, Bnode-leftChild);
prefix_trav (abc, Bnode-rightChild);
}
return abc;
}
template <class T>
queue<T> Binary_tree <T>::prefix_trav() {
queue<T> abc;
abc = prefix_trav (abc, root);
return abc;
}
每次我浏览树的元素时,我都会将其添加(放入)队列。
template (class T)
void queue<T>::addQ(T addData) {
node *n = new node;
n-data = addData;
n-next = NULL;
size++;
if (isEmpty()) {
first = n;
last = n;
} else {
n-next = last;
last = n;
}
cout<<"element "<<getSize()<<" has been added"<<endl;
}
但是只有根节点正在加入队列。
答案 0 :(得分:0)
我认为问题在于以下几点:
if (Bnode != NULL) {
abc.addQ (Bnode - data);
prefix_trav (abc, Bnode-leftChild);
prefix_trav (abc, Bnode-rightChild);
}
return abc;
您正在遍历左右儿童,但这不会影响abc
。您应该尝试的是:
if (Bnode != NULL) {
abc.addQ (Bnode - data);
abc = prefix_trav (abc, Bnode-leftChild);
abc = prefix_trav (abc, Bnode-rightChild);
}
return abc;
但是,我注意到你有Bnode-leftChild
和Bnode-rightChild
。这看起来像是指针减法 - 这是你的意图吗?您是否应该使用->
代替-
?