二叉树与N叉树
二叉树与N叉树联系
另一花生
竹杖芒鞋轻胜马,一蓑烟雨任平生
展开
-
538. 把二叉搜索树转换为累加树
给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。提醒一下,二叉搜索树满足下列约束条件:节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。左右子树也必须是二叉搜索树。输入:[4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]输出:[30,36,21,36,35,26,15原创 2022-01-16 14:50:44 · 61 阅读 · 0 评论 -
108. 将有序数组转换为二叉搜索树
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。输入:nums = [-10,-3,0,5,9]输出:[0,-3,9,-10,null,5]解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:输入:nums = [1,3]输出:[3,1]解释:[1,3] 和 [3,1] 都是高度平衡二叉搜索树。..原创 2022-01-16 14:48:18 · 156 阅读 · 0 评论 -
669. 修剪二叉搜索树
给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树不应该改变保留在树中的元素的相对结构(即,如果没有被移除,原有的父代子代关系都应当保留)。 可以证明,存在唯一的答案。所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。输入:root = [1,0,2], low = 1, high = 2输出:[1,null,2]输入:root =.原创 2022-01-16 10:32:14 · 71 阅读 · 0 评论 -
450. 删除二叉搜索树中的节点
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:首先找到需要删除的节点;如果找到了,删除它。输入:root = [5,3,6,2,4,null,7], key = 3输出:[5,4,6,2,null,null,7]解释:给定需要删除的节点值是 3,所以我们首先找到 3 这个节点,然后删除它。一个正确的答案是 [5,4,6,2,n原创 2022-01-15 11:27:16 · 74 阅读 · 0 评论 -
701. 二叉搜索树中的插入操作
给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。输入:root = [4,2,7,1,3], val = 5输出:[4,2,7,1,3,5]解释:另一个满足题目要求可以通过的树是:输入:root = [40,20,60,10,30,50,70], v..原创 2022-01-15 10:59:45 · 89 阅读 · 0 评论 -
235. 二叉搜索树的最近公共祖先
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8输出: 6解释: 节点 2 和节.原创 2022-01-15 03:31:14 · 148 阅读 · 0 评论 -
236. 二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出:3解释:节点 5 和节点 1 的最近公共祖先是节点 3 。输入:root = [3,5,1,6,2,0,8,null,nul.原创 2022-01-15 03:11:19 · 141 阅读 · 0 评论 -
501. 二叉搜索树中的众数
给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。假定 BST 有如下定义:结点左子树中所含结点的值小于等于当前结点的值结点右子树中所含结点的值大于等于当前结点的值左子树和右子树都是二叉搜索树例如:给定 BST[1,null,2,2], 1 \ 2 / 2返回[2].提示:如果众数超过1个,不需考虑输出顺序进阶:你可以不使用额外的空间吗?(假设由递归产生的隐式调用栈的开销不被计算在内).原创 2022-01-14 20:58:07 · 90 阅读 · 0 评论 -
530. 二叉搜索树的最小绝对差
给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。差值是一个正数,其数值等于两值之差的绝对值。输入:root = [4,2,6,1,3]输出:1输入:root = [1,0,48,null,null,12,49]输出:1...原创 2022-01-14 19:42:36 · 88 阅读 · 0 评论 -
700. 二叉搜索树中的搜索
给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。给定二叉搜索树: 4 / \ 2 7 / \ 1 3和值: 2你应该返回如下子树: 2 / \ 1 3class Solution { // 递归,普通二叉树 public TreeNode原创 2022-01-14 17:33:05 · 82 阅读 · 0 评论 -
654. 最大二叉树
给定一个不含重复元素的整数数组 nums 。一个以此数组直接递归构建的 最大二叉树 定义如下:二叉树的根是数组 nums 中的最大元素。左子树是通过数组中 最大值左边部分 递归构造出的最大二叉树。右子树是通过数组中 最大值右边部分 递归构造出的最大二叉树。返回有给定数组 nums 构建的 最大二叉树 。输入:nums = [3,2,1,6,0,5]输出:[6,3,5,null,2,0,null,null,1]解释:递归调用如下所示:- [3,2,1,6,0,5] 中的最大值是 6.原创 2022-01-14 15:03:50 · 160 阅读 · 0 评论 -
105. 从前序与中序遍历序列构造二叉树
给定一棵树的前序遍历 preorder 与中序遍历 inorder。请构造二叉树并返回其根节点。Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]Output: [3,9,20,null,null,15,7]Input: preorder = [-1], inorder = [-1]Output: [-1]/** * Definition for a binary tree node. * public cl原创 2022-01-14 13:15:42 · 122 阅读 · 0 评论 -
106. 从中序与后序遍历序列构造二叉树
根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。中序遍历 inorder =[9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3] 3 / \ 9 20 / \ 15 7/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode l.原创 2022-01-14 12:55:45 · 92 阅读 · 0 评论 -
113. 路径总和 II
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22输出:[[5,4,11,2],[5,8,4,5]]输入:root = [1,2,3], targetSum = 5输出:[]输入:root = [1,2], targetSum.原创 2022-01-14 11:27:39 · 125 阅读 · 0 评论 -
513. 找树左下角的值
给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。假设二叉树中至少有一个节点。输入: root = [2,1,3]输出: 1输入: [1,2,3,4,null,5,6,null,null,7]输出: 7/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * Tr.原创 2022-01-13 23:18:47 · 75 阅读 · 0 评论 -
404. 左叶子之和
计算给定二叉树的所有左叶子之和。 3 / \ 9 20 / \ 15 7在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} *原创 2022-01-13 21:29:19 · 80 阅读 · 0 评论 -
257. 二叉树的所有路径
给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。叶子节点 是指没有子节点的节点。输入:root = [1,2,3,null,5]输出:["1->2->5","1->3"]输入:root = [1]输出:["1"]/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode原创 2022-01-13 18:09:43 · 87 阅读 · 0 评论 -
222. 完全二叉树的节点个数
给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。输入:root = [1,2,3,4,5,6]输出:6输入:root = []输出:0输入:root = [1]输出:1/** * Definition for a binary tree原创 2022-01-13 11:18:00 · 105 阅读 · 0 评论 -
572. 另一棵树的子树
给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。输入:root = [3,4,5,1,2], subRoot = [4,1,2]输出:true输入:root = [3,4,5,1,2,null,null,null,null,0],.原创 2022-01-13 10:34:01 · 109 阅读 · 0 评论 -
100. 相同的树
给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。输入:p = [1,2,3], q = [1,2,3]输出:true输入:p = [1,2], q = [1,null,2]输出:false输入:p = [1,2,1], q = [1,1,2]输出:false/** * Definition for a binary tree node. * pu..原创 2022-01-13 01:12:08 · 91 阅读 · 0 评论 -
226. 翻转二叉树
翻转一棵二叉树。 4 / \ 2 7 / \ / \1 3 6 9 4 / \ 7 2 / \ / \9 6 3 1/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * T原创 2022-01-11 23:19:35 · 208 阅读 · 0 评论 -
111. 二叉树的最小深度
给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。输入:root = [3,9,20,null,null,15,7]输出:2输入:root = [2,null,3,null,4,null,5,null,6]输出:5/** * Definition for a binary tree node. * public class TreeNode { * int val; *原创 2022-01-11 22:54:00 · 91 阅读 · 0 评论 -
104. 二叉树的最大深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示例:给定二叉树[3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回它的最大深度3 /** * Definition for a binary tree node. * public class TreeNode { * int val; * ...原创 2022-01-11 22:46:54 · 204 阅读 · 0 评论 -
515. 在每个树行中找最大值
给定一棵二叉树的根节点 root ,请找出该二叉树中每一层的最大值。输入: root = [1,3,2,5,3,null,9]输出: [1,3,9]解释: 1 / \ 3 2 / \ \ 5 3 9输入: root = [1,2,3]输出: [1,3]解释: 1 / \ 2 3输入: root = [1]输出: ...原创 2022-01-11 21:39:14 · 67 阅读 · 0 评论 -
429. N 叉树的层序遍历
给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。输入:root = [1,null,3,2,4,null,5,6]输出:[[1],[3,2,4],[5,6]]输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]输出:[[1],[2,..原创 2022-01-11 15:52:41 · 220 阅读 · 0 评论 -
199. 二叉树的右视图
给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。输入:[1,2,3,null,5,null,4]输出:[1,3,4]输入:[1,null,3]输出:[1,3]输入:[]输出:[]/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode lef...原创 2022-01-11 15:21:05 · 150 阅读 · 0 评论 -
107. 二叉树的层序遍历 II
给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)输入:root = [3,9,20,null,null,15,7]输出:[[15,7],[9,20],[3]]输入:root = [1]输出:[[1]]输入:root = []输出:[]/** * Definition for a binary tree node. * public class TreeNode { *原创 2022-01-11 12:35:28 · 78 阅读 · 0 评论 -
117. 填充每个节点的下一个右侧节点指针 II
给定一个二叉树struct Node { int val; Node *left; Node *right; Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。进阶:你只能使用常量级额外空间。 使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。输入:root = [1,2,3,.原创 2022-01-10 23:38:39 · 70 阅读 · 0 评论 -
将升序数组转化为平衡二叉搜索树
描述给出一个升序排序的数组,将其转化为平衡二叉搜索树(BST).示例1输入:[-1,0,1,2]复制返回值:{1,0,2,-1}原创 2021-05-30 12:30:32 · 575 阅读 · 0 评论 -
NC14 按之字形顺序打印二叉树
描述给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)例如:给定的二叉树是{1,2,3,#,#,4,5}该二叉树之字形层序遍历的结果是[[1],[3,2],[4,5]]示例1输入:{1,2,3,#,#,4,5}复制返回值:[[1],[3,2],[4,5]]import java.util.*;/*public class TreeNode { int val = 0; Tr原创 2021-07-21 08:58:28 · 245 阅读 · 0 评论 -
二叉树的最大深度
import java.util.*;/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { public int maxDepth(TreeNode root) { .原创 2021-03-28 23:02:23 · 269 阅读 · 0 评论 -
求二叉树的层序遍历
描述给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)例如:给定的二叉树是{3,9,20,#,#,15,7},该二叉树层序遍历的结果是[[3],[9,20],[15,7]]原创 2021-05-30 14:28:01 · 300 阅读 · 0 评论 -
实现二叉树先序,中序和后序遍历
描述分别按照二叉树先序,中序和后序打印所有的节点。示例1输入:{1,2,3}复制返回值:[[1,2,3],[2,1,3],[2,3,1]]原创 2021-05-30 12:38:29 · 229 阅读 · 0 评论 -
判断一棵树是平衡二叉树
输入一棵二叉树,判断该二叉树是否是平衡二叉树。public class Solution { public boolean IsBalanced_Solution(TreeNode root) { return depth(root) != -1; } public int depth(TreeNode root){ if(root == null){ return 0; }原创 2021-05-27 00:01:16 · 383 阅读 · 0 评论 -
CC48 对称的二叉树
描述给定一棵二叉树,判断其是否是自身的镜像(即:是否对称)例如: 下面这棵二叉树是对称的数据范围:节点数满足0 \le n \le 10000≤n≤1000,节点上的值满足|val| \le 1000∣val∣≤1000要求:空间复杂度O(1)O(1),时间复杂度O(n)O(n)备注:你可以用递归和迭代两种方法解决这个问题输入:{1,2,2,3,4,4,3}返回值:true/*publ...原创 2021-11-01 10:25:26 · 259 阅读 · 0 评论 -
CC6 二叉树的后序遍历
描述用递归的方法对给定的二叉树进行后序遍历。例如:给定的二叉树为{1,#,2,3},返回[3,2,1].import java.util.*;import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * } */public class Solution { /**原创 2021-10-07 12:29:18 · 523 阅读 · 0 评论 -
617. 合并二叉树
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为NULL 的节点将直接作为新二叉树的节点。输入: Tree 1 Tree 2 1 2 ...原创 2021-12-20 09:51:13 · 408 阅读 · 0 评论 -
LC55 二叉树的中序遍历
描述给出一棵二叉树,返回这棵树的中序遍历例如:给出的二叉树为{1,#,2,3},返回[1,3,2].备注:递归的解法太没有新意了,你能用迭代的方法来解这道题吗?示例1输入:{1,#,2,3}返回值:[1,3,2]import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * } *原创 2021-09-17 00:40:57 · 61 阅读 · 0 评论 -
CC22 二叉树根节点到叶子节点的所有路径和
描述给定一个二叉树的根节点root,该树的节点值都在数字\ 0-90−9之间,每一条从根节点到叶子节点的路径都可以用一个数字表示。1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点2.叶子节点是指没有子节点的节点3.路径只能从父节点到子节点,不能从子节点到父节点4.总节点数目为n例如根节点到叶子节点的一条路径是1\to 2\to 31→2→3,那么这条路径就用\ 123123来代替。找出根节点到叶子节点的所有路径表示的数字之和例如:这颗二叉树一共有两条...原创 2021-11-03 02:26:37 · 806 阅读 · 0 评论 -
LC7 求二叉树的前序遍历
描述求给定的二叉树的前序遍历。例如:给定的二叉树为{1,#,2,3},返回:[1,2,3].备注;用递归来解这道题很简单,你可以给出迭代的解法么?如果你不明白{1,#,2,3}的含义,点击查看相关信息示例1输入:{1,#,2,3}返回值:[1,2,3]import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNo原创 2021-09-15 03:03:54 · 88 阅读 · 0 评论