数据结构 9 基础数据结构 二叉堆 了解二叉堆的元素插入、删除、构建二叉堆的代码方式...

是否记得我们在之前的学习中有学习到二叉树 忘记的小伙伴们请查看:完全二叉树的定义。

https://blogs.chaobei.xyz/archives/shuju2

二叉堆

二叉堆其实就是一个完全二叉树 一起复习一下吧:关于二叉树和满二叉树以及完全二叉树的基本概念。

二叉树

image.png

  • 每个节点下挂元素不超过2
  • 并且元素都是按照一定规律排列的

二叉树规律

按照前人的总结,我们可以得出以下结论。

  • 一个深度为K 的二叉树,最多包含节点数 2的k次方-1
  • 二叉树指定n 层级所包含的节点数为 2的n-1次方

满二叉树

从字面意思我们可以理解到:这个二叉树它是一种饱和的状态,顾名思义称作是满二叉树。
image.png

完全二叉树

除去二叉树的叶子节点,所有节点都包含有两个节点,并且节点都是按照一定顺序排列的,这样的二叉树被称作是完全二叉树

image.png

二叉堆类型

在上面我们已经提到过。二叉堆就是一种完全二叉树、二叉树的概念也已经了解到了。当然,现在应该分析二叉堆有有哪些性质

  • 最大堆
  • 最小堆

最大堆

最大堆的父节点元素的值都大于等于其两个子元素的值

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是二叉排序树的基本操作代码: ```c++ #include<iostream> using namespace std; // 二叉搜索树结点结构体 struct BSTNode { int data; BSTNode *left; BSTNode *right; }; // 查找操作 BSTNode* search(BSTNode *root, int x) { if (root == nullptr || root->data == x) { return root; } else if (x < root->data) { return search(root->left, x); } else { return search(root->right, x); } } // 插入操作 BSTNode* insert(BSTNode *root, int x) { if (root == nullptr) { root = new BSTNode; root->data = x; root->left = nullptr; root->right = nullptr; } else if (x < root->data) { root->left = insert(root->left, x); } else { root->right = insert(root->right, x); } return root; } // 查找最小结点 BSTNode* findMin(BSTNode *root) { if (root == nullptr) { return nullptr; } else if (root->left == nullptr) { return root; } else { return findMin(root->left); } } // 删除操作 BSTNode* remove(BSTNode *root, int x) { if (root == nullptr) { return nullptr; } if (x < root->data) { root->left = remove(root->left, x); } else if (x > root->data) { root->right = remove(root->right, x); } else if (root->left != nullptr && root->right != nullptr) { root->data = findMin(root->right)->data; root->right = remove(root->right, root->data); } else { BSTNode *temp = root; if (root->left == nullptr) { root = root->right; } else if (root->right == nullptr) { root = root->left; } delete temp; } return root; } // 中序遍历 void inorder(BSTNode *root) { if (root != nullptr) { inorder(root->left); cout << root->data << " "; inorder(root->right); } } int main() { BSTNode *root = nullptr; root = insert(root, 8); root = insert(root, 3); root = insert(root, 10); root = insert(root, 1); root = insert(root, 6); root = insert(root, 14); root = insert(root, 4); root = insert(root, 7); root = insert(root, 13); inorder(root); // 输出结果为:1 3 4 6 7 8 10 13 14 root = remove(root, 6); inorder(root); // 输出结果为:1 3 4 7 8 10 13 14 return 0; } ``` 以上代码中,`BSTNode` 是二叉搜索树结点的结构体,包含数据 `data` 和左右子树指针 `left` 和 `right`。`search` 函数实现查找操作,`insert` 函数实现插入操作,`findMin` 函数查找最小结点,`remove` 函数实现删除操作,`inorder` 函数实现中序遍历。最后在 `main` 函数中构建二叉搜索树,并进行插入删除、中序遍历等操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值