数据结构——二叉树基本操作源代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构二叉树基本操作
(1).
// 对二叉树的基本操作的类模板封装
//------------------------------------------------------------------------------------------------------------------------
#include
using namespace std;
//------------------------------------------------------------------------------------------------------------------------
//定义二叉树的结点类型BTNode,其中包含数据域、左孩子,右孩子结点。template
struct BTNode
{
T data ; //数据域
BTNode* lchild; //指向左子树的指针
BTNode* rchild; //指向右子树的指针
};
//------------------------------------------------------------------------------------------------------------------------
//CBinary的类模板
template
class BinaryTree
{
BTNode
public:
BinaryTree(){BT=NULL;} // 构造函数,将根结点置空
~BinaryTree(){clear(BT);} // 调用Clear()函数将二叉树销毁
void ClearBiTree(){clear(BT);BT=NULL;}; // 销毁一棵二叉树
void CreateBiTree(T end); // 创建一棵二叉树,end为空指针域标志
bool IsEmpty(); // 判断二叉树是否为空
int BiTreeDepth(); // 计算二叉树的深度
bool RootValue(T &e); // 若二叉树不为空用e返回根结点的值,函数返回true,否则函数返回false
BTNode
bool Assign(T e,T value); // 找到二叉树中值为e的结点,并将其值修改为value。
T GetParent(T e); // 若二叉树不空且e是二叉树中的一个结点那么返回其双亲结点值
T GetLeftChild(T e); // 获取左孩子结点值
T GetRightChild(T e); // 获取右孩子结点值
T GetLeftSibling(T e); // 获取左兄弟的结点值
T rightsibling(BTNode
T GetRightSibling(T e); // 获取右孩子的结点值
bool InsertChild(BTNode
bool DeleteChild(BTNode
void PreTraBiTree(); // 递归算法:先序遍历二叉树
void InTraBiTree(); // 递归算法:中序遍历二叉树
void PostTraBiTree(); // 递归算法:后序遍历二叉树
void PreTraBiTree_N(); // 非递归算法:先序遍历二叉树
void InTraBiTree_N(); // 非递归算法:中序遍历二叉树
void LevelTraBiTree(); // 利用队列层次遍历二叉树
int LeafCount(); // 计算叶子结点的个数
BTNode
void DisplayBTreeShape(BTNode
};
//二叉树的树形显示算法
template
void BinaryTree
{
if(bt)//空二叉树不显示
{ DisplayBTreeShape(bt->rchild,level+1);//显示右子树
cout< for(int i=0;i cout<<" "; //确保在第level列显示节点 cout< DisplayBTreeShape(bt->lchild,level+1);//显示左子树 }//if }//DisplayBTree template static int clear(BTNode { //销毁一棵二叉树 if(bt)//根结点不空 { clear(bt->lchild); //递归调用Clear()函数销毁左子树 clear(bt->rchild); //递归调用Clear()函数销毁右子树 cout<<"释放了指针"< delete bt; //释放当前访问的根结点 }