当前位置: 首页 > wzjs >正文

大庆北京网站建设wordpress添加变量

大庆北京网站建设,wordpress添加变量,开发电商平台多少钱,网站规划建设与管理维护教程二叉搜索树 二叉搜索树结构二叉搜索树插入二叉搜索树的查找二叉搜索树的删除二叉搜索树中序便利二叉搜索树默认成员函数实现 二叉搜索树结构 template<class K, class V> class BinarySeacherTreeNode { public:BinarySeacherTreeNode(K Key new K, V Val new V) :left…

二叉搜索树

  • 二叉搜索树结构
  • 二叉搜索树插入
  • 二叉搜索树的查找
  • 二叉搜索树的删除
  • 二叉搜索树中序便利
  • 二叉搜索树默认成员函数实现


二叉搜索树结构


template<class K, class V>
class BinarySeacherTreeNode
{
public:BinarySeacherTreeNode(K Key = new K, V Val = new V) :left(NULL), right(NULL), key(Key), val(Val) {}BinarySeacherTreeNode* left;BinarySeacherTreeNode* right;K key;V val;
};
template<class K, class V>
class BinarySeacherTree
{
public:using Node = BinarySeacherTreeNode<K, V>;
private:Node* head = NULL;

二叉搜索树插入


插入思路:
定义一个cur指针和一个parent指针;插入的key比cur指向的key大就往右边走cur走一次parent跟新知道cur为空此时判断parent的key和要插入的key的大小来决定插入左边还是右边

bool Insert(const K& key, const V& val)
{if (head == NULL){head = new Node(key, val);return true;}Node* parent = head;Node* cur = head;while (cur){if (key > cur->key){parent = cur;cur = cur->right;}else if (key < cur->key){parent = cur;cur = cur->left;}else{return false;}}//上面循环就是找到插入的父节点//下面还要判断插入父节点的左右孩子cur = new Node(key, val);if (parent->key < key){parent->right = cur;}else{parent->left = cur;}return true;
}

二叉搜索树的查找


查找思路:
如果查找的key大于当前节点的key就去右边反之左边,相等返回该节点
直到cur为空还没找到就返回空指针

Node* Find(const K& key)
{Node* cur = head;while (cur){if (cur->key < key){cur = cur->right;}else if (cur->key > key){cur = cur->left;}else{return cur;}}//cout << "找不到" << endl;return NULL;
}

二叉搜索树的删除


删除思路:

  1. 先找到要删除的节点
  2. 判断要删除的节点有结构孩子
  1. 删除的节点有一个或一个孩子
    该情况如下:
    在这里插入图片描述
    至于0个孩子节点可以看做有一个空节点进行处理
    我们找到只需要把parent指向cur的孩子这里还要进行判断首先就是看cur是parent的左孩子还是右孩子,之后在判断cur的那一个孩子是哪一个最后进行连接即可
    注意:
    这时候我们要考虑删除的是根节点的话我们直接改变根节点的指向就可以了
  2. 删除的节点有两个节点
    该情况如下:
    在这里插入图片描述
    此时我们要进行代替法就是找cur的右树中最左端的节点或者左子树最右端的节点交换里面的值然后删除代替的那个节点即可
bool Erase(const K& key)
{Node* cur = head;Node* parent = head;while (cur){if (key > cur->key){parent = cur;cur = cur->right;}else if (key < cur->key){parent = cur;cur = cur->left;}else{//1.删除的节点有2个孩子if (cur->left && cur->right){//去右树找找左的节点来代替然后析构该节点Node* replaceparent = cur;Node* replace = cur->right;while (replace->left){replaceparent = replace;replace = replace->left;}cur->val = replace->val;if (replaceparent->right == replace){replaceparent->right = replace->right;delete replace;replace = NULL;}else{replaceparent->left = replace->right;delete replace;replace = NULL;}}//2.删除的节点有0或1个孩子else{//如果删除的是根节点直接跟新我们的根节点if (cur == head){if (cur->left) head = cur->left;else head = cur->right;}else{if (parent->left == cur){if (cur->left) parent->left = cur->left;else parent->left = cur->right;}else{if (cur->left) parent->right = cur->left;else parent->right = cur->right;}}}return true;}}return false;
}

二叉搜索树中序便利


void InOrder()
{_inorder(head);
}
void _inorder(Node* head)
{if (head == NULL)return;_inorder(head->left);cout << "key:" << head->key << " val:" << head->val << " ";_inorder(head->right);
}

二叉搜索树默认成员函数实现


拷贝构造函数:

BinarySeacherTree(const BinarySeacherTree& b)
{this->head = createtree(b.head);
}
Node* createtree(Node* hea)
{if (hea == NULL) return nullptr;Node* root = new Node(hea->key, hea->val);root->left = createtree(hea->left);root->right = createtree(hea->right);return root;
}

赋值重载:

BinarySeacherTree<K, V> operator=( BinarySeacherTree<K, V> tem)
{//这里参数不要传入引用std::swap(head, tem.head);return *this;
}

析构函数:

~BinarySeacherTree()
{destory(head);head = NULL;
}
void destory(Node* hea)
{if (hea == NULL)return;destory(hea->left);destory(hea->right);delete hea;hea = NULL;
}
http://www.dtcms.com/wzjs/590112.html

相关文章:

  • 站外推广渠道网站开发都是用什么框架
  • aspx网站架设查询系统网站模板
  • 网站开发用什么语言比较好北京建设网上银行
  • 宁海哪里有做网站的做运动户外的网站都有哪些
  • 内蒙古城乡建设和住房建设厅网站百度推广一个关键词多少钱
  • 微信网站欣赏小企业网站如何建设好
  • sever2012 网站建设如何做网站后台的维护
  • 网站建设优化东莞企业手机端网站源码下载
  • 龙游网站建设做网站公司需要提供的资料
  • 微信企业网站 源码下载新平台推广赚钱
  • 怎么查网站开发使用的语言正能量网站窗口免费进
  • 温州市微网站制作多少钱利用大平台做网站
  • 网站运营方案书做网站的公司属于什么行业
  • 浙江网站建设上市公司建网站买完域名后怎么做
  • 做返利网站能赚钱网站中微信公众号链接怎么做
  • 网站开发市场情况网站打开显示建设中
  • 广州网站建设weeken中牟网站制作
  • 网站建设价格方案网站建设氺首选金手指14
  • 东莞市建设工程质量监督网站品牌注册证
  • p2p网站建设小微金融凡客官网登录入口网址
  • 企业网站特色建设企业文化建设网站
  • 科技政策要聚焦自立自强seo综合查询是什么
  • 网站升级通知自动跳跃帝国cms网站地图xml
  • 黑龙江省建设厅官方网站舟山论坛网站建设
  • 公众号免费素材网站黑龙江建筑工程网
  • 北京网站建设q479185700強杭州四喜做网站建设么
  • 聊城哪里有做网站的wordpress接入翼支付宝
  • 管理咨询公司企业文化网站排名优化系统
  • 更换网站程序黄山网站建设电话
  • 网站搭建教学上海人才服务网官网