数据结构——二叉树基本操作源代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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* BT;

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*GetRoot(); // 二叉树不为空获取根结点指针,否则返回NULL

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*p,T e);

T GetRightSibling(T e); // 获取右孩子的结点值

bool InsertChild(BTNode* p,BTNode* c,int RL);// 插入操作

bool DeleteChild(BTNode* p,int RL); //删除操作

void PreTraBiTree(); // 递归算法:先序遍历二叉树

void InTraBiTree(); // 递归算法:中序遍历二叉树

void PostTraBiTree(); // 递归算法:后序遍历二叉树

void PreTraBiTree_N(); // 非递归算法:先序遍历二叉树

void InTraBiTree_N(); // 非递归算法:中序遍历二叉树

void LevelTraBiTree(); // 利用队列层次遍历二叉树

int LeafCount(); // 计算叶子结点的个数

BTNode* SearchNode(T e); // 寻找到结点值为e的结点,返回指向结点的指针

void DisplayBTreeShape(BTNode*bt,int level=1);

};

//二叉树的树形显示算法

template

void BinaryTree::DisplayBTreeShape(BTNode*bt,int level)

{

if(bt)//空二叉树不显示

{ DisplayBTreeShape(bt->rchild,level+1);//显示右子树

cout<

for(int i=0;i

cout<<" "; //确保在第level列显示节点

cout<data; //显示节点

DisplayBTreeShape(bt->lchild,level+1);//显示左子树

}//if

}//DisplayBTree

template

static int clear(BTNode*bt)

{ //销毁一棵二叉树

if(bt)//根结点不空

{

clear(bt->lchild); //递归调用Clear()函数销毁左子树

clear(bt->rchild); //递归调用Clear()函数销毁右子树

cout<<"释放了指针"<

delete bt; //释放当前访问的根结点

}

相关文档
最新文档