labuladong算法小抄笔记
文章平均质量分 65
Cigar丶
这个作者很懒,什么都没留下…
展开
-
算法小抄学习笔记 — 8.二叉树的遍历
先序遍历void preOrder(TreeNode root) { if (root == null) return; visited(root); // 先序遍历位置 preOrder(root.left); preOrder(root.right);}中序遍历void inOrder(TreeNode root) { if (root == null) return; preOrder(root.left);原创 2021-01-06 09:51:34 · 142 阅读 · 1 评论 -
算法小抄学习笔记 — 7.二叉树的最近公共祖先
1 二叉树递归灵魂三问这个函数应该干什么?函数功能正向逻辑推理base case是啥?得到递归结果后,会做什么?反向逻辑推理下面使用一个题目来示例一下。2 题目2.1 236. 二叉树的最近公共祖先2.1.1 题目给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,原创 2021-01-06 09:50:50 · 1767 阅读 · 1 评论 -
算法小抄学习笔记 — 6.二叉搜索树(二)
1 二叉搜索树框架TreeNode traverse(TreeNode root, int x) { if (root == null) return null; if (root.val == x) { return root; } if (root.val > x) { return traverse(root.right, x); } if (root.val < x) { return tr原创 2021-01-06 09:49:24 · 114 阅读 · 1 评论 -
算法小抄学习笔记 — 5.二叉搜索树(一)
1 二叉搜索树的定义二叉搜索树(Binary Search Tree)简称BST,对于BST中的每一个节点node:如果左子树的值都比node小。右子树的值都比node大。那么这颗树为二叉搜索树。2 二叉搜索树的性质中序遍历递增,很多二叉搜索树的题目都是基于这一性质来展开的,很重要。void traverse(TreeNode root) { if (root == null) return; traverse(root.left); // 中序遍历代原创 2021-01-06 09:46:54 · 139 阅读 · 0 评论 -
算法小抄学习笔记 — 4.二叉树递归思想训练(三)
1 如何判断使用先序、中序还是后序遍历仔细思考一个二叉树节点需要做什么的前提条件,然后使用什么遍历就清楚起来了。例如:1.1 226. 翻转二叉树1.1.1 题目翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1要翻转以根节点为树时,需要的前提条件是其左子树内部已经翻转。其右子树内部已经翻转。所以原创 2021-01-05 22:19:50 · 147 阅读 · 0 评论 -
算法小抄学习笔记 — 3.二叉树序列化与反序列化
1 二叉树的序列化与反序列化二叉树的序列化是指将二叉树转换为唯一标识的字符串,反序列化是指将字符串转换为相应的二叉树。二叉树可以使用先序、中序、后序和层次遍历进行序列化,可以使用先序、后序和层次遍历进行反序列化。(中序遍历不可以反序列化)如何判断两个二叉树相等?可能想法就是遍历二叉树,依次比较节点是否相等,这是没有问题的。但是如何判断子树中是否相等呢?可能就需要将所有子树序列化,加入一个map集合,从而判断所有相等的子树。652 寻找重复的子树,就使用了这个思想,将在下一笔记中总结此题。原创 2021-01-05 22:18:04 · 234 阅读 · 0 评论 -
算法小抄学习笔记 — 2.二叉树递归思想训练(二)
1 二叉树递归基本思想就是常见的先序、中序和后序遍历框架,如下:/* 二叉树遍历框架 */void traverse(TreeNode root) { // 前序遍历 traverse(root.left) // 中序遍历 traverse(root.right) // 后序遍历}写递归算法的关键是要明确函数的「定义」是什么,然后相信这个定义,利用这个定义推导最终结果,绝不要试图跳入递归。2 构造二叉树构造二叉树的题目,很有可能需要控制左右边界原创 2021-01-05 22:14:20 · 123 阅读 · 0 评论 -
算法小抄学习笔记 — 1.二叉树递归思想训练(一)
1 二叉树递归基础就是常见的先序、中序和后序遍历框架,如下:/* 二叉树遍历框架 */void traverse(TreeNode root) { // 前序遍历 traverse(root.left) // 中序遍历 traverse(root.right) // 后序遍历}写递归算法的关键是要明确函数的「定义」是什么,然后相信这个定义,利用这个定义推导最终结果,绝不要试图跳入递归。2 快排,归并排序与二叉树遍历的关系2.1 快排就是二叉树的先原创 2021-01-05 22:13:25 · 208 阅读 · 0 评论 -
算法小抄学习笔记 — 0.链表相关
1. 递归反转整个链表ListNode reverse(ListNode head) { if (head.next == null) return head; ListNode last = reverse(head.next); head.next.next = head; head.next = null; return last;}递归问题主要要认清函数的功能和返回值,不要被嵌套陷进去了。92. 反转链表 II2. 迭代反转整个链表// 反转以原创 2021-01-05 22:08:40 · 103 阅读 · 0 评论