96SEO 2026-02-23 11:22 12
。

无论是花几天时间“突击”#xff0c;还是利用零碎的时间持续学习#xff0c;在数据结构上下点功夫都是值得的。
那么Python
如果需要用到这些知识却没有掌握则会让人感到沮丧也可能导致面试被拒。
无论是花几天时间“突击”还是利用零碎的时间持续学习在数据结构上下点功夫都是值得的。
那么Python
None:print(subtree.data)preorderTrav(subtree.left)preorderTrav(subtree.right)def
None:preorderTrav(subtree.left)print(subtree.data)preorderTrav(subtree.right)def
None:preorderTrav(subtree.left)preorderTrav(subtree.right)print(subtree.data)#
操作符存储在内节点操作数存储在叶子节点的二叉树。
(符号树真难打出来)*/
Type可以实现二元操作符ExpressionTree(expStr):
ExpressionTree((a/(b-3)))print(The
self._buildString(self._expTree)def
self._buildString(treeNode.left)expStr
self._buildString(treeNode.right)expStr
varDict)print(subtree.element)return
遍历表达式字符串的每个字符expQ.put(token)self._expTree
创建root节点self._recBuildTree(self._expTree,
_ExpTreeNode(None)self._recBuildTree(curNode.left,
_ExpTreeNode(None)self._recBuildTree(curNode.right,
expTree.evaluate(vars))Heap堆二叉树最直接的一个应用就是实现堆。
堆就是一颗完全二叉树最大堆的非叶子节点的值都比孩子大最小堆的非叶子结点的值都比孩子小。
python内置了heapq模块帮助我们实现堆操作比如用内置的heapq模块实现个堆排序:
range(len(h))]但是一般实现堆的时候实际上并不是用数节点来实现的而是使用数组实现效率比较高。
为什么可以用数组实现呢?因为完全二叉树的性质
可以用下标之间的关系表示节点之间的关系MaxHeap的docstring中已经说明了
MaxHeap:Heaps:完全二叉树最大堆的非叶子节点的值都比孩子大最小堆的非叶子结点的值都比孩子小Heap包含两个属性order
tree)在插入一个新节点的时候始终要保持这两个属性插入操作保持堆属性和完全二叉树属性,
操作维持堆属性extract操作只获取根节点数据并把树最底层最右节点copy到根节点后sift-down操作维持堆属性用数组实现heap从根节点开始从上往下从左到右给每个节点编号则根据完全二叉树的性质给定一个节点i
2使用数组实现堆一方面效率更高节省树节点的内存占用一方面还可以避免复杂的指针操作减少调试难度。
def
heapself._elements[self._count]
最右下的节点放到root后siftDownself._siftDown(0)self.assert_keep_heap()return
self._elements[ndx]self._siftUp(parent)
self._elements[largest]:largest
self._elements[ndx]self._siftDown(largest)def
我加了这个函数是用来验证每次add或者extract之后仍保持最大堆的性质_len
range(_len):h.add(i)h.assert_keep_heap()for
确定每次出来的都是最大的数字添加的时候是从小到大添加的assert
用自己实现的MaxHeap实现堆排序直接修改原数组实现inplace排序if
reversed(range(_len)):***Seq[i]
range(_len):to_sort.append(randint(0,
_is_sorted(to_sort)test_simpleHeapSort()14章:
BST树节点包含key可payload。
用BST来实现之前用hash实现过的Map
ADT.性质对每个内部节点V1.对于节点V所有key小于V.key的存储在V的左子树。
2.所有key大于V.key的存储在V的右子树对BST进行中序遍历会得到升序的key序列def
注意这里没有else语句了应为在被调用处add函数里先判断了是否有重复keyreturn
O(N)被删除的节点分为三种:1.叶子结点:直接把其父亲指向该节点的指针置None2.该节点有一个孩子:
删除该节点后父亲指向一个合适的该节点的孩子3.该节点有俩孩子:(1)找到要删除节点N和其后继S中序遍历后该节点下一个(2)复制S的key到N(3)从N的右子树中删除后继S即在N的右子树中最小的assert
self._bstMinumum(subtree.right)subtree.key
写这个函数为了验证add和delete操作始终维持了bst的性质
subtree.valueself.assert_keep_bst_property(subtree.left)self.assert_keep_bst_property(subtree.right)elif
subtree.valueself.assert_keep_bst_property(subtree.right)elif
subtree.valueself.assert_keep_bst_property(subtree.left)class
0self._bstTraversal(root)self._curItem
self._***Keys[self._curItem]self._curItem
None:self._bstTraversal(subtree.left)self._***Keys[self._curItem]
1self._bstTraversal(subtree.right)def
之前用来测试用hash实现的map改为用BST实现的Map测试
range(_len):print(len(h))print(bef,
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback