Latest

剑指offer 树

剑指offer 树

递归是一个过程或函数在其定义或说明中直接或间接调用自身的一种方法,它通常将一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。因此递归过程中,最重要的是查看 能否将问题分解为更小的子问题,这是使用递归的关键。 二叉树的递归,则是将某个节点的左子树、右子树看成一颗完整的树,那么对于子树的访问或者操作就是对于原树的访问或者操作的子问题,因此可以自我调用函数不断进入子树。 JZ55 二叉树的深度 思路一 —— 递归 二叉树的深度等于根节点这个1层加上左子树和右子树深度的最大值,即root_depth = max(left_depth, right_depth) + 1。而每个子树我们都可以看出一个根节点,于是我们可以对这个问题划分为子问题,利用递归来解决: * 终止条件:当进入叶子节点后,再进入子节点,即为空,没有深度可言,返回0。 * 返回值:每一级按照上述公式,返回两边子树深度的最大值加上本级的深度,即加1。 * 本级任务:每一级的任务就是进入左右子树,求左右子树的深度。 import java.util.*; /** public class Tr

By Yucan Huang
剑指offer-链表

剑指offer-链表

JZ24 反转链表 描述 给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。数据范围: 0≤n≤10000≤n≤1000要求:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n) 。如当输入链表{1,2,3}时,经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。以上转换过程如下图所示: 思路一 — 头插法 没有头结点的头插法 public class ReverseList { public static void

By Yucan Huang