- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
v1.0 可编辑可修改
题目:
编程实现二叉查找树的建立、 中序遍历、 元素查找等功能, 要求解释实现过程及演示实
际例子的运行结果。
算法描述:
首先创建二叉树结点类,其主要包括:二叉树结点数据域,指向左、右子树的指针,构
造函数,设置当前结点左、右子树、 数据域以及判断当前结点是否为叶子结点等。 然后进行
二叉树类定义, 其私有部分为定义二叉树根结点指针,公有部分主要包括: 构造函数、 析构
函数、判断二叉树是否为空树、先,中,后序遍历的递归与非递归、二叉树删除、层序遍历
以及二叉树搜索等。接下来将对一些重要函数算法进行描述:
1、 isLeaf 函数:若该结点的左子树和右子树都为空,则为叶子结点。
2、 isEmpty 函数:根结点为空则为空树。
3、 Parent 函数:首先判断给定结点是否有双亲,根结点和空结点一定无双亲,初始化
一个临时变量, 用于跟进查找双亲结点, 查找到后其保存的便是双亲结点。 先递归在左子树
中查找,如果找到, 便结束递归且返回双亲结点指针;如果没有找到, 再递归在右子树中查
找。如果都没有找到,说明给定结点的双亲结点不在该二叉树中。
4、 LeftSibling (RightSibling )函数:首先找到当前结点的双亲,然后判断双亲结点
左右子树是否为空,其中必然有一个不为空,返回另一个子树指针即可。
5、 DeleteBinaryTree 函数:首先判断是否为空树,若为空,则返回,然后递归删除左
子树,递归删除右子树,最后删除根结点。
6、 PreOrder 函数:首先判断是否为空树,若为空,则返回,然后访问根结点,递归遍
历左子树,递归遍历右子树,结束。
7、 PreOrderWithoutRecusion 函数:使用栈来模拟递归过程,首先申请栈,用于保存
1
v1.0 可编辑可修改
结点指针序列,申请指针 pointer 保存当前根指针,然后判断栈是否为空,若栈为空且
pointer
为空,跳出函数, 否则若
pointer
不为空, 访问
pointer
所指结点,
pointer
入栈,
pointer
指向其左子树;若
pointer
为空,弹出栈顶元素赋给
pointer
, pointer
指向其右
子树,结束。
8、 CreateTree 函数:采用先序遍历序列构造二叉树,设‘ 0’为空结点,输入非‘ 0’
数,生成新结点,递归创建左子树和右子树。
9、Search
函数:采用先序遍历查找给定元素是否在二叉树中,
首先判断树是否是空树,
若是空树,则返回空指针。然后初始化临时指针 temp ,查找成功后 temp 即为所给元素所在
结点的指针。如果当前结点为空,则返回;否则判断当前结点是否为目标结点,如果是,记
住结点位置, 返回;否则, 递归地在左子树中查找, 如果找到, 记住结点位置, 返回; 否则,
递归地在右子树中查找。判断 temp 是否为空,若为空,则未查找到给定元素。
10、LevelOrder
函数:利用队列记录二叉树每一层,首先申请队列,申请指针
pointer
保存根结点,然后判断 pointer 是否为空,若不为空,则出函数。队列首元素出队,赋给 pointer ,访问 pointer
pointer 入队。如果队列为空,跳
所指结点,如果 pointer 所指结点
的左子树不为空, 则左子树根结点指针入队; 如果 pointer 所指结点的右子树不为空, 则右
子树根结点指针入队,结束。
先序遍历,后序遍历思想与中序遍历一致,这里不再一一分析。最后创建一颗二叉树,
用以检验各函数的功能。
源程序:
#includeiostream
#includestack
#includequeue
#include cstdlib
2
v1.0 可编辑可修改
using namespace std;
template class T
class BinaryTree;
template class T
class BinaryTreeNode{
friend class BinaryTree T ;
//friend class BinarySearchTree T ;
private:
T data; // 二叉树结点数据域
BinaryTreeNode T * left; // 二叉树结点指向左子树的指
针
BinaryTreeNode T * right; // 二叉树结点指向右子树
的指针
public:
BinaryTreeNode(){}; // 默认构造函数
BinaryTreeNode(const T ele) :left(NULL), right(
原创力文档


文档评论(0)