前缀遍历BST并输出到队列

时间:2014-04-23 18:31:37

标签: c++ queue binary-search-tree

我为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;
}

但是只有根节点正在加入队列。

1 个答案:

答案 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-leftChildBnode-rightChild。这看起来像是指针减法 - 这是你的意图吗?您是否应该使用->代替-