摘要: 1. 根据有序数组生成平衡搜索二叉树 1.1. 问题 给定一个有序数组,生成一个平衡搜索二叉树。 注:平衡二叉树的定义是,对于该二叉树的每个子树,该子树的左子树高度和右子树高度差在1之内。 1.2. 代码 这道题很简单,二分递归即可。 public TreeNode<Integer> buildBS 阅读全文
posted @ 2022-05-12 09:11 迈吉 阅读(79) 评论(0) 推荐(0) 编辑
摘要: 1. 统计完全二叉树的节点数 1.1. 问题 如题。 注:完全二叉树表示二叉树内没有空隙;满二叉树是一种特殊的完全二叉树,其所有的叶子节点均在同一层上。 1.2. 思路 方法一:遍历 最简单的做法:遍历一次。时间复杂度为O(n)。 方法二:高度探查 用高度探查方式的时间复杂度为O(h^2)。 当我们 阅读全文
posted @ 2022-05-11 19:15 迈吉 阅读(57) 评论(0) 推荐(0) 编辑
摘要: 1. 二叉树的序列化、反序列化 1.1. 问题 将一个二叉树序列化为字符串。 从序列化后的字符串重建一棵二叉树。 1.2. 思路 用#表示空节点,用!表示一个节点的结尾。 这道题可以用二叉树的前序遍历、后序遍历、层序遍历来做。 中序遍历不好做,因为给定一个序列后,没办法一下子将根节点找出来。 对于前 阅读全文
posted @ 2022-05-11 18:52 迈吉 阅读(31) 评论(0) 推荐(0) 编辑
摘要: 1. Morris遍历 1.1. 思路 Morris遍历通过利用左子树前序遍历下的最后一个节点的right指针,来做到以时间复杂度为O(n)空间复杂度为O(1)的开销遍历一个二叉树。 1.2. 代码 public static <T> void morrisPre(TreeNode<T> root, 阅读全文
posted @ 2022-05-10 18:14 迈吉 阅读(20) 评论(0) 推荐(0) 编辑
摘要: 1. 二叉树遍历 1.1. 问题 分别用递归、非递归的方式实现二叉树的前序、中序、后序遍历。 1.2. 思路 递归的方式就不用说了,很简单。 对于非递归的方式,我们需要用一个栈来模拟,递归函数的方法嵌套。 非递归的前序遍历还挺容易写出来的,在中序遍历这里我卡壳了。 最后看书,发现是用一个cur游标来 阅读全文
posted @ 2022-05-10 18:05 迈吉 阅读(38) 评论(0) 推荐(0) 编辑
摘要: 1. 动态规划心得总结 1.1. 常规情况的基本步骤 给出递推函数定义 找出递推函数的递推关系 根据递推关系可以写出递归版本的代码 根据递推关系可以写出打表法的动态规划版本的代码 1.2. 给出递推函数的定义 & 找出递推关系 基本步骤中的第一步、第二步是紧密关联的。递推函数定义的不同会导致递推关系 阅读全文
posted @ 2022-05-08 10:56 迈吉 阅读(308) 评论(0) 推荐(0) 编辑