你的代码有一些问题。在中序遍历、后序遍历和主函数中,你调用了错误的递归函数名。应该分别调用InOrder、PostOrder和PreOrder来实现正确的遍历顺序。以下是修改后的代码:
#include<iostream>
using namespace std;
template<class T>
class BiNode
{
public:
T data;
BiNode<T>* parent;
BiNode<T>* lchild;
BiNode<T>* rchild;
};
template<class T>
class BiTree
{
public:
void Create(BiNode<T>*& R, T data[], int i, int n); // 创建二叉树
void Release(BiNode<T>* R); // 释放二叉树
BiNode<T>* root; // 根节点
BiTree(T data[], int n); // 构造函数
void PreOrder(BiNode<T>* R); // 前序遍历
void InOrder(BiNode <T>* R); // 中序遍历
void PostOrder(BiNode<T>* R); // 后序遍历
~BiTree(); // 析构函数
};
template<class T>
BiTree<T>::BiTree(T data[], int n)
{
Create(root, data, 1, n);
}
template<class T>
void BiTree<T>::Create(BiNode<T>*& R, T data[], int i, int n) // i表示位置,从1开始
{
if (i <= n && data[i - 1] != 0)
{
R = new BiNode<T>; // 创建根节点
R->data = data[i - 1];
R->lchild = R->rchild = NULL;
Create(R->lchild, data, 2 * i, n); // 创建左子树
Create(R->rchild, data, 2 * i + 1, n); // 创建右子树
}
}
// 前序遍历
template<class T>
void BiTree<T>::PreOrder(BiNode<T>* R)
{
if (R != NULL)
{
cout << R->data; // 访问节点
PreOrder(R->lchild);
PreOrder(R->rchild);
}
}
// 中序遍历
template<class T>
void BiTree<T>::InOrder(BiNode<T>* R)
{
if (R != NULL)
{
InOrder(R->lchild);
cout << R->data; // 访问节点
InOrder(R->rchild);
}
}
// 后序遍历
template<class T>
void BiTree<T>::PostOrder(BiNode<T>* R)
{
if (R != NULL)
{
PostOrder(R->lchild);
PostOrder(R->rchild);
cout << R->data; // 访问节点
}
}
int main()
{
int n = 5;
int data[5] = {1, 2, 3, 4, 5};
BiTree<int> tree(data, n);
cout << "In Order: ";
tree.InOrder(tree.root);
return 0;
}
这段代码创建了一个具有给定数据的二叉树,并通过中序遍历方式打印出来。你可以根据需要进行修改和扩展。
内容由零声教学AI助手提供,问题来源于学员提问