【发布时间】:2019-05-27 07:13:06
【问题描述】:
我正在尝试将 InOrder 设为 void 类型,它在二叉搜索树中执行按顺序遍历。
//Code Provided by Professor
//Program 5.1:Inorder traversal of a binary tree
//===============================================
template <class T>
void Tree<T>::Inorder()
{// Driver.
Inorder(root);
}
template <class T>
void Tree<T>::Inorder(TreeNode<T> *currentNode)
{// Workhorse.
if (currentNode) {
Inorder(currentNode->leftChild);
Visit(currentNode);
Inorder(currentNode->rightChild);
}
}
以上代码由教授提供,作为参考,自己制作InOrder函数。
这段代码是我为我的二叉搜索树声明元素(必要条件)的方式。
#include <iostream>
using namespace std;
template<class K, class E>
class BinarySearchTree
{
public:
virtual void Insert(const pair<K, E>&) = 0;
virtual void Delete(const K&) = 0;
virtual pair<K, E>*Get(const K&) const = 0;
virtual void InOrder()const;
};
template<class T>
struct TreeNode {
T data;
TreeNode<T> *leftChild;
TreeNode<T> *rightChild;
TreeNode(T node) : data(node), leftChild(0), rightChild(0) {}
};
template<class K, class E>
class BST : BinarySearchTree<K, E> {
public:
BST() : root(0) {}
void Insert(const pair<K, E>&);
void Delete(const K&);
pair<K, E>*Get(const K&)const;
void InOrder()const;
private:
TreeNode<pair<K, E>> *root;
};
其他函数运行良好,如果有任何关于使用 C++ 制作 InOrder 函数的帮助,我将不胜感激。
【问题讨论】:
-
您获得的代码只是类型略有不同,所以请说明您遇到的问题。
-
@RR 你能解释一下为什么插入需要一对吗? K、E 意味着什么? TreeNode 只存储一种类型(类)。
-
也许你会发现二叉搜索树的中序遍历与任意二叉树的中序遍历完全相同。
-
不相关,但您的类包含一堆原始指针。这意味着它们应该具有非平凡的析构函数,以及显式或删除的复制/移动 ctor 和赋值运算符。
-
@Lakhera Insert 需要一对,因为 TreeNode 对是以
的形式构成的。这就是为什么。
标签: c++ data-structures binary-search-tree inorder