ZBLOG

#include using namespace std; template class BiNode { public: T data; BiNode* parent; BiNode* lchild; BiNode* rchild; }; template class BiTree { public: void Create(BiNode* &R, T data[], int i, int n)...

这段代码存在几个问题:

  1. 在BiTree类的构造函数中,调用了Create函数来创建二叉树,但是在声明BiTree对象时并没有传入参数,所以需要将构造函数的定义修改为:BiTree(T data[], int n)

  2. 在PreOrder、InOrder和PostOrder函数中,递归调用的应该是对应结点的子树,而不是一直调用PreOrder函数。所需要将 PreOrder(R->lchild);PreOrder(R->rchild); 修改为 InOrder(R->lchild);InOrder(R->rchild); ,同时,在PostOrder函数中也要做相应的修改。

  3. 在主函数main()中,创建BiTree对象时缺少参数,并且声明了一个未使用的变量i。可以将声明改为 BiTree<int> tree(data, n); ,并删除int i=1;。

下面是修正后的代码:

#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);//后序遍历
	void LevelOrder(BiNode<T>* R);//层序遍历

	~BiTree();//析构函数
};

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>
BiTree<T>::BiTree(T data[], int n)
{
	Create(root, data, 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;
	BiTree<int> tree(data, n);
	int data[5] = { 1,2,3,4,5 };
	BiNode<int>* Root;
	tree.Create(Root, data, 1, n);
	tree.InOrder(Root);

	return 0;
}

这样,代码就能正确创建二叉树并进行中序遍历了。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=14392

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?