
树
CodersCoder
有人见星辰,有人见尘埃。
展开
-
算法--翻转二叉树
描述翻转一棵二叉树。示例分析反转二叉树,可以先交换根节点的两个子节点,然后通过同样的方式在交换根节点的子节点的两个子节点。1.从root开始遍历二叉树;2.只要当前节不为空,交换两个子节点;3.对子节点重复上述步骤实现/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; *原创 2020-09-16 18:28:00 · 303 阅读 · 0 评论 -
算法--路径总和
描述给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例分析从根节点开始,使用递归,判断左节点或者右节点到叶子节点是否存在sum-root.val即可。实现class Solution { public boolean hasPathSum(TreeNode root, int sum) { if (root == null) { return fa原创 2020-09-08 18:46:12 · 747 阅读 · 0 评论 -
算法--将有序数组转换为二叉搜索树
描述将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:分析参考https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/solution/jian-da原创 2020-09-06 23:00:56 · 128 阅读 · 0 评论 -
算法--二叉树的最大深度
描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例分析采用递归法:递归问题,主要是拆分子问题和明确递归出口。1.第一步,初始化工作。2.第二步,计算根结点到左右子树高度。3.第三步,递归计算左右子树最大高度。4.最后,返回二叉树的最大深度。实现/** * Definition for a binary tree node. * public class TreeNode { * int原创 2020-09-05 16:55:48 · 206 阅读 · 0 评论 -
算法--对称二叉树
描述给定一个二叉树,检查它是否是镜像对称的。示例分析参考官方解法,使用两种方式完成:1.递归如果一个树的左子树与右子树镜像对称,那么这个树是对称的。如果同时满足下面的条件,两个树互为镜像:它们的两个根结点具有相同的值每个树的右子树都与另一个树的左子树镜像对称我们可以实现这样一个递归函数,通过「同步移动」两个指针的方法来遍历这棵树,pp 指针和 qq 指针一开始都指向这棵树的根,随后 pp 右移时,qq 左移,pp 左移时,qq 右移。每次检查当前 pp 和 qq 节点的值是否原创 2020-09-04 18:15:05 · 162 阅读 · 0 评论 -
算法--相同的树
描述给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例分析使用深度优先遍历分析终止条件与返回值:1.当两棵树的当前节点都为 null 时返回 true2.当其中一个为 null 另一个不为 null 时返回 false3.当两个都不为空但是值不相等时,返回 false实现/** * Definition for a binary tree node. * public class TreeNode { *原创 2020-09-03 18:45:36 · 134 阅读 · 0 评论