C++二叉树实现

本文介绍了如何使用C++实现二叉树,包括二叉树节点类的定义,二叉树类的构建,以及相应的测试程序和测试数据,展示了二叉树的插入和遍历操作。
摘要由CSDN通过智能技术生成

二叉树节点类:

/*二叉树结点类BinTreeNode声明*/
template<class T>
class BinTreeNode {
private:
	BinTreeNode * left, * right;//指向左右结点的指针
	T data;//数据域
public:
	BinTreeNode(const T& item, BinTreeNode * left = NULL, BinTreeNode * right = NULL) :data(item), left(left), right(right){}
	BinTreeNode * getLeft() { return left; }
	BinTreeNode * getRight() { return right; }
	T& getData() { return data; }
	void setLeft(BinTreeNode * left) { this->left = left; }
	void setRight(BinTreeNode * right) { this->right = right; }
	void setData(const T& item) { data = item; }
};

二叉树类:

/*二叉树类BinTree声明*/
template<class T>
class BinTree {
private:
	BinTreeNode<T> * root;//指向二叉树根节点的指针
	T stop;//公祖奥二叉树时的输入结束符,即:若输入stop则停止输入
public:
	BinTree(BinTreeNode<T> * t=NULL):root(t){}//构造函数
	virtual~BinTree() { del(root); }//析构函数,删除整棵二叉树
	//在以结点t为根节点的子树中搜索结点p的父节点
	BinTreeNode<T> * getFather(BinTreeNode<T> * t, BinTreeNode<T> * p);
	//在以结点t为根结点的子树中查找data域为item的结点
	BinTreeNode<T> * find(BinTreeNode<T> * t, const T& item);
	//从树中删除结点t及其左右子树(包括删除之后的一些列更新操作)
	void delSubTree(BinTreeNode<T> * t);
	//删除结点t及其左右子树
	void del(BinTreeNode<T> * t);
	//先根遍历并输出以结点t为根结点的子树
	void preOrder(BinTreeNode<T> * t);
	//中根遍历并输出以结点t为根节点的子树
	void InOrder(BinTreeNode<T> * t);
	//后根遍历并输出以结点t为根结点的子树
	void PostOrder(BinTreeNode<T> * t);
	//层次遍历并输出以结点t为根结点的子树
	void levelOrder(BinTreeNode<T> * t);
	//非递归先根遍历并输出以结点t为根结点的子树
	void NorecPreOrder(BinTreeNode<T> * t);
	//非递归中根遍历并输出以结点t为根结点的子树
	void NorecInOrder(BinTreeNode<T> * t);
	//非递归后根遍历并输出以结点t为根节点的子树
	void NorecPostOrder(BinTreeNode<T> * t);
	//创建二叉树
	void createBinTree(T stop);
	//创建一棵二叉树并返回该二叉树的根结点
	BinTreeNode<T> * create();
	//复制以结
  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值