
算法相关
阿飞1120
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
二叉树翻转
二叉树翻转递归思想非递归思想: 翻转一棵二叉树。 递归思想 从根节点起,一次翻转左右孩子的值,然后再对左右字数进行递归 class Solution { public: TreeNode* invertTree(TreeNode* root) { if (nullptr == root || (root->right == nullptr && ro...原创 2019-09-22 12:08:13 · 294 阅读 · 0 评论 -
位运算相关算法
啊原创 2019-10-04 23:41:42 · 250 阅读 · 0 评论 -
顺序表、链表快排,基于快排求解topK问题
快速排序和topK问题快速排序基于链表的快排基于快排思想求解topK问题 快速排序 1、调用partition,找到一个基准index,使得数组左边的元素都小于基准值,数组右边的元素都大于基准值 2、对左侧和右侧的数组递归调用快排 #include <stdio.h> const int MAX_LEN = 10; int partition(int* list, int left...原创 2019-10-04 12:12:27 · 482 阅读 · 0 评论 -
堆排序和topK问题
堆排序和topK问题完全二叉树堆排序 完全二叉树 完全二叉树除了树的最后一层节点不需要是满的,其它的每一层从左到右都是满的。它有以下三个特点: 左孩子index=父节点index * 2 + 1 右孩子index=父节点index * 2 + 2 最后一个非叶子节点编号为index/2 堆排序 #include <iostream> // 调整最大堆 int adjust_hea...原创 2019-10-02 14:22:03 · 312 阅读 · 0 评论 -
判断是否为镜像二叉
判断是否为镜像二叉树判断是否为镜像二叉树 判断是否为镜像二叉树 把树root,强行当做两颗树:root,root;判断这两棵树是否镜像 条件1:这两棵树的根节点相等 条件2:第1颗树的左孩子val 与 第2颗树的右孩子val相等 第1颗树的右孩子val 与 第1颗树的左孩子val相等 class Solution { public: bool isSymmetric(TreeNode* r...原创 2019-09-25 22:38:43 · 423 阅读 · 0 评论 -
二叉搜索树的最近公共祖先
二叉搜索树的最近公共祖先二叉搜索树的最近公共祖先 二叉搜索树的最近公共祖先 根据二茬搜索树的特性: 如果两个结点val都比root结点val大,那它两都在右子树; 如果两个结点val都比root结点val小,那它两都在左子树; 否则root就是最近公共结点 class Solution { public: TreeNode* lowestCommonAncestor(TreeNode* r...原创 2019-09-22 14:43:41 · 316 阅读 · 0 评论 -
判断是否为平衡二叉树
判断是否为平衡二叉树判断是否为平衡二叉树 判断是否为平衡二叉树 1、根据基础的树深度函数判断两个子树的深度差值小于2 2、采用递归思想,对左孩子、有孩子判断是否是平衡二叉树 class Solution { public: int node_depth(TreeNode* node) { if (node == NULL) { ret...原创 2019-09-22 14:34:54 · 174 阅读 · 0 评论 -
二叉树的层次遍历
二叉树的层次遍历二叉树的层次遍历 二叉树的层次遍历 采用队列先进先出的特性 step1:先把根节点push进去 step2.1:如果队列不为空,当前队列的size即为这一层总共的Node数,即将队列前size个node放入同一层 step2.2:在2.1步骤放入新Node的过程中,如果新Node有孩子,需要将其孩子push进队列中 涉及到的api: 队列定义:std::queue<T>...原创 2019-09-22 14:31:15 · 284 阅读 · 0 评论 -
二叉树的三种遍历
二叉树的三种遍历中序遍历前序遍历后序遍历 中序、前序、后序是指对根节点的访问顺序,孩子结点无论哪种遍历方式,都是先左后右!!! 中序遍历 左 中 右 class Solution { public: int inorder(TreeNode* root) { if (root != NULL) { inorder(root-&...原创 2019-09-22 14:22:44 · 159 阅读 · 0 评论 -
二叉树的 最大|最小 深度
二叉树的 最大|最小 深度二叉树的最大深度二叉树的最小深度 二叉树的最大深度 采用递归的思想 class Solution { public: int maxDepth(TreeNode* root) { if (root == NULL) { return 0; } int left_depth = ...原创 2019-09-22 12:18:48 · 267 阅读 · 0 评论 -
通过有序数组 构建二次平衡搜索树
有序数组构建二次平衡搜索树递归思想+二分查找 递归思想+二分查找 从根节点起,其val为数组二分查找中间值 对左右孩子再进行同样的操作 class Solution { public: TreeNode* to_bst(vector<int>& nums, int left, int right) { if (left > right) ...原创 2019-09-22 12:12:03 · 232 阅读 · 0 评论 -
翻转链表
翻转链表翻转链表 翻转链表 思想:使用三个指针pre,cur,np 每次指针顺序移动后,pre结点被正确归位,while循环之后的状态见下图: class Solution { public: ListNode* reverseList(ListNode* head) { if (head == nullptr || head->next == nullptr) ...原创 2019-10-05 12:30:20 · 229 阅读 · 0 评论