LeetCode--Tree
想飞的盗版鱼
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
leetcode(tree)--257.二叉树的所有路径
leetcode(tree)–257.二叉树的所有路径 1,题目: 2,思路: 方法一:深度优先: 思路与算法 最直观的方法是使用深度优先搜索。在深度优先搜索遍历二叉树时,我们需要考虑当前的节点以及它的孩子节点。 如果当前节点不是叶子节点,则在当前的路径末尾添加该节点,并继续递归遍历该节点的每一个孩子节点。 如果当前节点是叶子节点,则在当前路径末尾添加该节点后我们就得到了一条从根节点到叶子节点的路径,将该路径加入到答案即可。 方法二:广度优先: 思路与算法: 我们也可以用广度优先搜索来实现。我们维护一原创 2020-09-04 14:51:05 · 141 阅读 · 0 评论 -
leetcode(Tree)--104. 二叉树的最大深度
leetcode(Tree)–104. 二叉树的最大深度 1,题目: 2,思路: 方法一:递归: 找出终止条件:当前节点为空 找出返回值:节点为空时说明高度为0,所以返回0;节点不为空时则分别求左右子树的高度的最大值,同时加1表示当前节点的高度,返回该数值 方法二:迭代: BFS思想: 3,代码: 方法一:递归: class Solution { public int maxDepth(TreeNode root) { if(root == null) {原创 2020-07-18 17:51:40 · 167 阅读 · 0 评论 -
leetcode(Tree)--96. 不同的二叉搜索树
leetcode(Tree)–96. 不同的二叉搜索树 1,题目: 2,思路: 方法一:动态规划: 思路: 给定一个有序序列 1⋯n,为了构建出一棵二叉搜索树,我们可以遍历每个数字 i,将该数字作为树根,将 1⋯(i−1) 序列作为左子树,将 (i+1)⋯n 序列作为右子树。接着我们可以按照同样的方式递归构建左子树和右子树。 算法流程: 题目要求是计算不同二叉搜索树的个数。为此,我们可以定义两个函数: G(n): 长度为 n 的序列能构成的不同二叉搜索树的个数。 F(i, n): 以 i为根、序列长度为原创 2020-07-15 16:10:55 · 191 阅读 · 0 评论 -
leetcode(Tree)--590. N叉树的后序遍历
leetcode(Tree)–590. N叉树的后序遍历 1,题目: 2,思路: 方法一:迭代: 用到了栈,栈用于存放节点的值 用到了linkedList链表,这个链表用于存放最后的结果 方法二:递归: 其实就是在dfs这个方法中进行了递归的操作。 3,代码: 方法一:迭代: class Solution { public List<Integer> postorder(Node root) { //迭代 LinkedList<Integer>原创 2020-07-10 22:07:51 · 204 阅读 · 0 评论 -
leetcode(Tree)--检查平衡性
leetcode(Tree)–检查平衡性 1,题目: 2,思路: 方法一:后续遍历(递归): 方法二:递归的另一种写法: 3,代码: 方法一:后续遍历(递归): class Solution { //后序遍历 boolean flag = true; public boolean isBalanced(TreeNode root) { dfs(root); return flag; } public int dfs(TreeNode r原创 2020-06-27 18:33:16 · 178 阅读 · 0 评论 -
leetcode(Tree)--101. 对称二叉树
leetcode(Tree)–101. 对称二叉树 1,题目: 2,思路: 方法一:递归: 如果同时满足下面的条件,两个树互为镜像: 1.它们的两个根结点具有相同的值 2.每个树的右子树都与另一个树的左子树镜像对称 我们可以实现这样一个递归函数,通过「同步移动」两个指针的方法来遍历这棵树,p 指针和 q 指针一开始都指向这棵树的根,随后 p 右移时,q 左移,p左移时,q 右移。每次检查当前 p 和 q 节点的值是否相等,如果相等再判断左右子树是否对称。 方法二:队列实现: 现在我们改用队列来实现,思路原创 2020-06-19 10:07:42 · 209 阅读 · 0 评论
分享