gpt4 book ai didi

c++ - 二叉搜索树的遍历

转载 作者:行者123 更新时间:2023-11-28 02:49:31 31 4
gpt4 key购买 nike

<分区>

我正在尝试创建一个程序来处理二叉搜索树,我的讲师使用此声明设置了此函数,该声明必须保持不变。

void BSTType<T>::traverse(std::ostream& out, TravType trav) const{

这是我目前的实现方式,但是 std::ostream& out 的用途是什么,我如何使用它作为我的主程序?我不明白为什么我们需要这个作为参数而不是我正在使用的当前树。请尽快帮忙。这是晚上 8 点到期的,我的导师不会帮忙。如果需要更多信息,请在评论或其他内容中告诉我。

template <class T>
void BSTType<T>::traverse(std::ostream& out, TravType trav) const{
if(trav==IN)
inorder(root);
else if(trav=PRE)
preorder(root);
else
postorder(root);
}

这是我从主程序调用这个函数的想法

tree.traverse(???, IN);

这应该通过调用 inorder(root) 函数使用中序遍历输出树。我不明白问号所在的地方是什么

根据用户输入的 travType,这是我的 traverse 可以调用的函数

void BSTType<T>::inorder(BTNodeType<T>* node) const{
if (node!= NULL){
inorder(node->left);
std::cout << node->item << " ";
inorder(node->right);
}
}

template <class T>
void BSTType<T>::postorder(BTNodeType<T>* node) const{
if (node!= NULL){
postorder(node->left);
postorder(node->right);
std::cout << node->item << " ";
}
}

template <class T>
void BSTType<T>::preorder(BTNodeType<T>* node) const{
if(node!=NULL){
std::cout << node->item<< " ";
preorder(node-> left);
preorder(node-> right);
}
}

编辑:出于某种原因,这个函数没有正确复制我的树,有人知道为什么吗?

template <class T>
void BSTType<T>::copy(BTNodeType<T>*& node1, BTNodeType<T>* node2){
if(node2==NULL)
node1=NULL;
else{
node1=new BTNodeType<T>;
node1->item=node2->item;
copy(node1->left, node2->left);
copy(node1->right, node2->right);
}
}

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com