
树
树
低头看天,抬头走路
句句都是正确的废话,招招都是致命的空招。
展开
-
leetcode99. 恢复二叉搜索树
题目给你二叉搜索树的根节点 root ,该树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。进阶:使用 O(n) 空间复杂度的解法很容易实现。你能想出一个只使用常数空间的解决方案吗?示例 1:输入:root = [1,3,null,null,2]输出:[3,1,null,null,2]解释:3 不能是 1 左孩子,因为 3 > 1 。交换 1 和 3 使二叉搜索树有效。示例 2:输入:root = [3,1,4,null,null,2]输出:[2,1,4,nu原创 2021-01-10 23:28:04 · 276 阅读 · 1 评论 -
leetcode236. 二叉树的最近公共祖先
题目给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释: 节点 5 和节原创 2021-01-10 23:09:28 · 148 阅读 · 0 评论 -
leetcode124. 二叉树中的最大路径和
给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入:[1,2,3] 1 / \ 2 3输出:6示例2:输入:[-10,9,20,null,null,15,7] -10 / \ 9 20 / \ 15 7输出:42思路dfs的过程中会经历每个父节点,并计算出经过该父节点的最原创 2021-01-10 17:36:22 · 161 阅读 · 0 评论 -
leetcode112. 路径总和
题目给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 ...原创 2019-08-29 21:20:18 · 128 阅读 · 0 评论 -
leetcode113. 路径总和 II
题目给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ ...原创 2019-08-29 21:18:44 · 97 阅读 · 0 评论 -
leetcode129. 求根到叶子节点数字之和
题目给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。说明: 叶子节点是指没有子节点的节点。示例 1:输入: [1,2,3]1/ 2 3输出: 25解释:从根到叶子节点路径 1->2 代表数字 12.从根到叶...原创 2019-07-18 23:47:28 · 117 阅读 · 0 评论 -
leetcode98. 验证二叉搜索树
题目给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入:2/ 1 3输出: true示例 2:输入:5/ 1 4/ 3 6输出: false解释: 输入为: [5,1,4,null,nu...原创 2019-07-12 00:30:53 · 143 阅读 · 0 评论 -
leetcode112. 路径总和
题目路径总和给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ \ 7 ...原创 2019-08-20 14:51:26 · 111 阅读 · 0 评论 -
leetcode145. 二叉树的后序遍历
题目给定一个二叉树,返回它的 后序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1]进阶: 递归算法很简单,你可以通过迭代算法完成吗?思路参考【数据结构】二叉树(前、中、后)序遍历的递归与非递归算法实现/** * Definition for a binary tree node. * stru...原创 2019-08-29 21:07:12 · 195 阅读 · 0 评论 -
leetcode144. 二叉树的前序遍历
题目给定一个二叉树,返回它的 前序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3]进阶: 递归算法很简单,你可以通过迭代算法完成吗?思路参考【数据结构】二叉树(前、中、后)序遍历的递归与非递归算法实现/** * Definition for a binary tree node. * s...原创 2019-08-29 21:09:25 · 95 阅读 · 0 评论 -
leetcode105. 从前序与中序遍历序列构造二叉树
题目根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7实现/** * Definition for a binary tree...原创 2019-08-29 21:22:30 · 167 阅读 · 0 评论 -
leetcode 106. 从中序与后序遍历序列构造二叉树
题目根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树: 3 / \ 9 20 / \ 15 7实现/** * Definition for a binary tre...原创 2019-08-29 21:24:07 · 384 阅读 · 0 评论 -
leetcode129. 求根到叶子节点数字之和
题目给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。说明: 叶子节点是指没有子节点的节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 25解释:从根到叶子节点路径 1->2 代...原创 2019-08-29 21:27:05 · 119 阅读 · 0 评论 -
leetcode103. 二叉树的锯齿形层次遍历
题目给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回锯齿形层次遍历如下:[ [3], [20,9], [15,7]]思路双栈,一个栈先插左子树再插右...原创 2019-09-02 17:11:17 · 147 阅读 · 0 评论 -
leetcode108 将有序数组转换为二叉搜索树
题目将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \-3 9/ /-10 5思路1.找到了根节点,...原创 2019-08-12 23:58:56 · 165 阅读 · 0 评论 -
leetcode110. 平衡二叉树
题目给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4] ...原创 2019-08-20 10:47:44 · 101 阅读 · 0 评论 -
leetcode107. 二叉树的层次遍历 II
题目给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回其自底向上的层次遍历为:[[15,7],[9,20],[3]]思路1.分层遍历,控制两个计数器2.从底层向上层输出 vec.insert(vec.b...原创 2019-08-16 15:25:32 · 98 阅读 · 0 评论 -
leetcode109. 有序链表转换二叉搜索树
有序链表转换二叉搜索树给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树: 0 / \-3 9...原创 2019-08-16 16:36:10 · 142 阅读 · 0 评论 -
树的小结和二叉树的递归遍历
public class BinaryTree { private BinaryNode root; public void printPreOrder(){ if(root != null){ root.printPreOrder(); } } public void printInOrder(){原创 2016-08-20 17:22:58 · 616 阅读 · 0 评论 -
leetcode94. 二叉树的中序遍历
题目给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]进阶: 递归算法很简单,你可以通过迭代算法完成吗?思路参考【数据结构】二叉树(前、中、后)序遍历的递归与非递归算法实现/** * Definition for a binary tree node. * struct...原创 2019-08-29 21:13:29 · 169 阅读 · 0 评论 -
leetcode114. 二叉树展开为链表
题目给定一个二叉树,原地将它展开为链表。例如,给定二叉树 1 / \ 2 5 / \ \3 4 61 \ 2 \ 3 \ 4 \ 5 \ 6实现/** * Definition for a binary tree node. * st...原创 2019-08-29 21:15:38 · 210 阅读 · 0 评论 -
剑指 Offer 54. 二叉搜索树的第k大节点
题目给定一棵二叉搜索树,请找出其中第k大的节点。示例 1:输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2输出: 4示例 2:输入: root = [5,3,6,2,4,null,null,1], k = 3 5 / \ 3 6 / \ 2 4 / 1输出: 4思路思路1.中序遍历后为升序数组,取第k大的元素思路2. 反中序遍历+计数器时间复杂度:原创 2020-10-27 20:59:04 · 111 阅读 · 0 评论 -
特定深度节点链表
题目给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 D,则会创建出 D 个链表)。返回一个包含所有深度的链表的数组。示例:输入:[1,2,3,4,5,null,7,8] 1 / \ 2 3 / \ \ 4 5 7 / 8输出:[[1],[2,3],[4,5,7],[8]]思路1.类似于二叉树的层次遍历,借助队列和两个计数器2.区别点是这里需要根据每层原创 2020-10-27 20:13:33 · 218 阅读 · 0 评论 -
leetcode102. 二叉树的层次遍历
题目给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树: [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回其层次遍历结果:[[3],[9,20],[15,7]]思路1.遍历每层节点时用队列存储每个节点的左右子节点2.用计数器统计当前层次的节点数量和下层节点的数量3.当层节点遍历...原创 2019-07-18 23:15:30 · 144 阅读 · 0 评论