【牛客带你学编程C++方向】项目练习第10期(截止6.29)
C++方向活动帖:【牛客带你学编程】【C++方向】0基础小白入门培养计划!
牛客带你学编程活动总贴:【牛客带你学编程】0基础小白入门培养计划!
C++项目练习:第10期
练习时间:6月15日-6月29日(2周)
活动规则:
- 每一期一个项目,届时会开新帖发布
- 学员直接将答案提交到该贴评论区即可
- 两周后,公布导师参考答案
- 导师评选出当期最佳代码(将设置为精彩回复)
奖励:牛客大礼包一份(牛客定制水杯 牛客定制笔 牛客定制程序员徽章 滑稽抱枕)
参与方式:直接将你的代码回复到本帖评论区
----------------------------------------------------
本期题目:
C++ STL中map和set存储方式都是使用红黑树的方式,其实质都是二叉搜索树,实现二叉搜索树的数据结构。
节点定义如下:
template <class T>
class BSTNode{
public:
T key; //关键字(键值)
BSTNode *left; //左孩子
BSTNode *right; //右孩子
BSTNode *parent;//父结点
BSTNode(T value, BSTNode *p, BSTNode *l, BSTNode *r):
key(value),parent(),left(l),right(r) {}
};
template <class T>
class BSTree {
private:
BSTNode<T> *mRoot; //根结点
public:
BSTree();
~BSTree();
//前序遍历"二叉树"
void preOrder();
//中序遍历"二叉树"
void inOrder();
//后序遍历"二叉树"
void postOrder();
// (递归实现)查找"二叉树"中键值为key的节点
BSTNode<T>* search(T key);
// (非递归实现)查找"二叉树"中键值为key的节点
BSTNode<T>* iterativeSearch(T key);
//查找最小结点:返回最小结点的键值。
T minimum();
//查找最大结点:返回最大结点的键值。
T maximum();
//找结点(x)的后继结点。即,查找"二叉树中数据值大于该结点"的"最小结点"。
BSTNode<T>* successor(BSTNode<T> *x);
//找结点(x)的前驱结点。即,查找"二叉树中数据值小于该结点"的"最大结点"。
BSTNode<T>* predecessor(BSTNode<T> *x);
//将结点(key为节点键值)插入到二叉树中
void insert(T key);
//删除结点(key为节点键值)
void remove(T key);
//销毁二叉树
void destroy();
//打印二叉树
void print();
private:
//前序遍历"二叉树"
void preOrder(BSTNode<T>* tree) const;
//中序遍历"二叉树"
void inOrder(BSTNode<T>* tree) const;
//后序遍历"二叉树"
void postOrder(BSTNode<T>* tree) const;
// (递归实现)查找"二叉树x"中键值为key的节点
BSTNode<T>* search(BSTNode<T>* x, T key) const;
// (非递归实现)查找"二叉树x"中键值为key的节点
BSTNode<T>* iterativeSearch(BSTNode<T>* x, T key) const;
//查找最小结点:返回tree为根结点的二叉树的最小结点。
BSTNode<T>* minimum(BSTNode<T>* tree);
//查找最大结点:返回tree为根结点的二叉树的最大结点。
BSTNode<T>* maximum(BSTNode<T>* tree);
//将结点(z)插入到二叉树(tree)中
void insert(BSTNode<T>* &tree, BSTNode<T>* z);
//删除二叉树(tree)中的结点(z),并返回被删除的结点
BSTNode<T>* remove(BSTNode<T>* &tree, BSTNode<T> *z);
//销毁二叉树
void destroy(BSTNode<T>* &tree);
//打印二叉树
void print(BSTNode<T>* tree, T key, int direction);
};
参与方式:直接将你的代码回复到本帖评论区

查看4道真题和解析
联想公司福利 1500人发布