![](https://img-blog.csdnimg.cn/e8981d7e797943e9bd94a54a3312e1c3.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
二叉树习题
二叉树数据结构
@~007
学习的笔记,复习的资料。发布的内容限于学习,如有侵权请联系作者。
展开
-
合并二叉树
来源:力扣(LeetCode)链接:OJ链接给你两棵二叉树: root1 和 root2 。想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。返回合并后的二叉树。注意: 合并过程必须从两个树的根节点开始。示例 1:输入:root1 = [1,3,2,5], root2 = [2,1,3,n原创 2022-04-19 23:15:55 · 73 阅读 · 0 评论 -
二叉树搜索树转换成排序双向链表
来源牛客网OJ链接描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示数据范围:输入二叉树的节点数 0 \le n \le 10000≤n≤1000,二叉树中每个节点的值 0\le val \le 10000≤val≤1000要求:空间复杂度O(1)O(1)(即在原树上操作),时间复杂度 O(n)O(n)注意:1.要求不能创建任何新的结点,只能调整树中结点指针的指向。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继2.返回链表中的第一个节点的指原创 2022-04-19 11:39:19 · 521 阅读 · 0 评论 -
判断另一棵树是否为子树
来源:力扣(LeetCode)链接:OJ链接给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。示例 1:输入:root = [3,4,5,1,2], subRoot = [4,1,2]输出:true示例 2:输入:root = [3,4,5,1,2原创 2022-04-18 15:49:09 · 120 阅读 · 0 评论 -
二叉树前序非递归遍历实现
来源:力扣(LeetCode)链接:OJ链接给你二叉树的根节点 root ,返回它节点值的 前序 遍历。示例 1:输入:root = [1,null,2,3]输出:[1,2,3]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]示例 4:输入:root = [1,2]输出:[1,2]示例 5:输入:root = [1,null,2]输出:[1,2]提示:树中节点数目在范围 [0, 100] 内-100 <= Nod原创 2022-04-19 22:55:48 · 153 阅读 · 0 评论 -
判断一颗二叉树是否是平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。示例 1:输入:root = [3,9,20,null,null,15,7]输出:true示例 2:输入:root = [1,2,2,3,3,null,null,4,4]输出:false示例 3:输入:root = []输出:true提示:树中的节点数在范围 [0, 5000] 内-104 <= Node.val <= 1原创 2022-04-18 16:19:34 · 76 阅读 · 0 评论 -
判断两棵树是否是相同的树
来源:力扣(LeetCode)链接:OJ链接给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入:p = [1,2,3], q = [1,2,3]输出:true示例 2:输入:p = [1,2], q = [1,null,2]输出:false示例 3:输入:p = [1,2,1], q = [1,1,2]输出:false提示:两棵树上的节点数目都在范围 [0, 100] 内原创 2022-04-18 15:40:52 · 136 阅读 · 0 评论 -
二叉树最大深度
来源:力扣(LeetCode)链接:OJ链接给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3 。class Solution { public int maxDepth(TreeNode root) { if(root==null) return 0; int leftHeight=max原创 2022-04-18 16:13:17 · 45 阅读 · 0 评论 -
二叉树的分层遍历
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。示例 1:输入:root = [3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]示例 2:输入:root = [1]输出:[[1]]示例 3:输入:root = []输出:[]提示:树中节点数目在范围 [0, 2000] 内-1000 <= Node.val <= 1000来源:力扣(LeetCode)链接:OJ链接class原创 2022-04-18 16:50:47 · 139 阅读 · 1 评论 -
根据一棵树的前序遍历与中序遍历构造二叉树
给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。示例 1输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]输出: [3,9,20,null,null,15,7]示例 2:输入: preorder = [-1], inorder = [-1]输出: [-1]提示:1 <= preorder.length <原创 2022-04-19 12:51:30 · 269 阅读 · 0 评论 -
二叉树的构建及遍历
来源牛客网OJ链接描述编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。输入描述:输入包括1行字符串,长度不超过100。输出描述:可能有多组测试数据,对于每组数据, 输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。 每个输出结果占一行。示例1输入:abc##de#g#原创 2022-04-18 16:48:26 · 67 阅读 · 0 评论 -
根据一棵树的中序遍历与后序遍历构造二叉树
来源:力扣(LeetCode)链接:OJ链接给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。示例 1输入:inorder = [9,3,15,20,7], postorder = [9,15,7,20,3]输出:[3,9,20,null,null,15,7]示例 2:输入:inorder = [-1], postorder = [-1]输出:[-1]提示:1原创 2022-04-19 13:07:23 · 553 阅读 · 0 评论 -
对称二叉树
给你一个二叉树的根节点 root , 检查它是否轴对称。示例 1:输入:root = [1,2,2,3,4,4,3]输出:true示例 2:输入:root = [1,2,2,null,3,null,3]输出:false提示:树中节点数目在范围 [1, 1000] 内-100 <= Node.val <= 100来源:力扣(LeetCode)链接:OJ链接public boolean isSymmetric(TreeNode root) { return原创 2022-04-18 16:44:28 · 111 阅读 · 0 评论 -
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例 1:输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出:3解释:节点 5 和节点 1 的最近公共祖先是节点 3 。示例 2:输入:root = [3,5,1,6,2,0,8,null,原创 2022-04-19 11:18:38 · 658 阅读 · 0 评论 -
二叉树创建字符串
来源:力扣(LeetCode)链接:OJ链接给你二叉树的根节点 root ,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。空节点使用一对空括号对 “()” 表示,转化后需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对输入:root = [1,2,3,4]输出:“1(2(4))(3)”解释:初步转化后得到 “1(2(4)())(3()())” ,但省略所有不必要的空括号对后,字符串应该是"1(2(4))(3)" 。示例 2:输入:原创 2022-04-19 15:52:17 · 306 阅读 · 0 评论 -
二叉树后序非递归遍历实现
来源:力扣(LeetCode)链接:OJ链接给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。示例 1:输入:root = [1,null,2,3]输出:[3,2,1]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]提示:树中节点的数目在范围 [0, 100] 内-100 <= Node.val <= 100class Solution { public List<Integer> po原创 2022-04-19 22:59:21 · 226 阅读 · 0 评论 -
二叉树中序非递归遍历实现
来源:力扣(LeetCode)链接:添加链接描述给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。示例 1:输入:root = [1,null,2,3]输出:[1,3,2]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]提示:树中节点数目在范围 [0, 100] 内-100 <= Node.val <= 100class Solution { public List<Integer> in原创 2022-04-19 22:58:47 · 58 阅读 · 0 评论