113. 路径总和 II/面试题34. 二叉树中和为某一值的路径(简单)
113. 路径总和 II/面试题34. 二叉树中和为某一值的路径(简单)给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
说明: 叶子节点是指没有子节点的节点。
示例:给定如下二叉树,以及目标和 sum = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
返回:
1234[ [5,4,11,2], [5,8,4,5]]
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/path-sum-ii
思路:和路径总和3一样,只不过不是输出路径个数了,要将路径全部输出出来
代码1234567891011121314151617181920212223242526272829303132333435363738394041class Solution { List<List<Integer>> ...
111. 二叉树的最小深度(简单)
111. 二叉树的最小深度(简单)给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
示例:给定二叉树 [3,9,20,null,null,15,7],
123453 / \ 9 20 / \ 15 7
返回它的最小深度 2.
来源:力扣(LeetCode)链接: https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/
思路:和104的思路一样,也是递归,但是要判断一下临界条件,当左右深度有为0的时候,单独进行判断
代码:12345678910111213141516171819202122/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) ...
105. 从前序与中序遍历序列构造二叉树/面试题07. 重建二叉树(较难)
105. 从前序与中序遍历序列构造二叉树/面试题07. 重建二叉树(较难)根据一棵树的前序遍历与中序遍历构造二叉树。
注意:你可以假设树中没有重复的元素。
例如,给出
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:
3
/ \
9 20
/ \
15 7
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal
思路1:前序遍历第一个节点是根节点,中序遍历根据前序遍历的根节点,可以知道左节点,和右节点,递归来就行
思路2思路一存在一个问题,在中序遍历找到根节点的位置每次都得遍历中序遍历的数组去寻找,我们可以用一个hashmap把中序遍历数组的每个元素的值和下标存起来,这样就可以直接找到了,减少循环
回看记录200622先序的一个数为根节点,再从中序中找到根节点下标,然后递归调用左右
代码1:123 ...
104. 二叉树的最大深度/面试题55 - I. 二叉树的深度(简单)
104. 二叉树的最大深度/面试题55 - I. 二叉树的深度(简单)给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:给定二叉树 [3,9,20,null,null,15,7],
123453 / \ 9 20 / \ 15 7
返回它的最大深度 3 。
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree
思路:这题属于简单题,常规解法用递归最简单,还有用自定义栈实现(DFS)
回看记录20.05.19添加栈实现
代码1:1234567891011121314151617181920212223242526/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode ...
102. 二叉树的层序遍历/面试题32 - II. 从上到下打印二叉树 II(简单)
102. 二叉树的层序遍历/面试题32 - II. 从上到下打印二叉树 II(简单,值得看)给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:二叉树:[3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
12345[ [3], [9,20], [15,7]]
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal
思路:二叉树的层次遍历,这里借助队列实现
代码:1234567891011121314151617181920212223242526272829303132333435/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode ...
101. 对称二叉树(简单)
101. 对称二叉树(简单)给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1
/ \
2 2
/ \ / \
3 4 4 3
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
1
/ \
2 2
\ \
3 3
进阶:
你可以运用递归和迭代两种方法解决这个问题吗?
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/symmetric-tree
思路1:递归
代码:12345678910111213141516171819202122class Solution { public boolean isSymmetric(TreeNode root) { if(root==null){ return true; } return isSymmetric(root.left,r ...
96. 不同的二叉搜索树(困难)
96. 不同的二叉搜索树(困难)给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?
示例:
输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树:
123451 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \2 1 2 3
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/unique-binary-search-trees
思路1:假设n个节点存在二叉排序树的个数是G(n),令f(i)为以i为根的二叉搜索树的个数,则G(n) = f(1) + f(2) + f(3) + f(4) + … + f(n)
当i为根节点时,其左子树节点个数为i-1个,右子树节点为n-i,则f( ...
94. 二叉树的中序遍历(简单)
94. 二叉树的中序遍历(简单)给定一个二叉树,返回它的中序 遍历。
示例:
输入: [1,null,2,3]
123451 \ 2 /3
输出: [1,3,2]进阶: 递归算法很简单,你可以通过迭代算法完成吗?
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-inorder-traversal
思路1:递归,常规思路,
思路2:迭代,入栈先判断左子树,然后入栈,再入右子树
代码:123456789101112131415161718192021/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { List<Integer ...
79. 单词搜索/面试题12. 矩阵中的路径(一般)
79. 单词搜索/面试题12. 矩阵中的路径(一般)给定一个二维网格和一个单词,找出该单词是否存在于网格中。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
示例:12345678910board =[ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E']]给定 word = "ABCCED", 返回 true给定 word = "SEE", 返回 true给定 word = "ABCB", 返回 false
提示:board 和 word 中只包含大写和小写英文字母。1 <= board.length <= 2001 < ...
74. 搜索二维矩阵(简单)
70. 爬楼梯(简单)编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。
示例 1:输入:matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ]target = 3输出: true
示例 2:输入:matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ]target = 13输出: false
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/search-a-2d-matrix
思路:与剑指offer5一样,,可以从右上角开始找,这个思路比较简单
思路2二分思路,未写
代码:12345678910111213141516171819202122232425262728293031323334353637 //f(n)=f(n-1)+f(n-2)/ ...