二叉树的遍历

二叉树的遍历有三种:前序遍历、中序遍历和后序遍历。每种遍历的实现又有递归和迭代两种,这篇文章我们来讨论如何用比较优雅的代码来实现二叉树的遍历。 首先我来定义一个二叉树的节点:

  前序遍历(Preorder Traversal) 简单来讲,前序遍历就是先访问父节点,再访问左孩子,最后访问右孩子,即以父、左、右的顺序来遍历。 … Read more

输出不大于n的素数

问题:输出 1 到 n 之间的所有素数。 普通解法:暴力判断。对于每一个数,查看有没有除 1 和本身之外的因子。但在判断时也有一些技巧,比如除2外所有偶数都不是素数(故代码中外层循环 i 的步长为 2),素数只可能是奇数,而奇数不可能有偶因子(故代码中内层循环 j 的步长为 2),再比如找因子时只需找到平方根就可以了(故代码中内层循环的终止条件是小于等于 k)。 [crayon-584c7f6b7 … Read more

Java保留两位小数

在处理小数时经常会遇到保留两位小数的问题,那Java是如何实现的呢? 一、Math.round() public static long round(double a)

该方法简单明了,只是如果小数后面有0,则在输出时会被省略,例如3.50会输出为3.5。   二、String.format() public static … Read more

那些有意思的题

1. 123456789101112…2014除以9的余数是__。 依据:9的余数等于数的各位加起来的和对9求余,反过来也成立。
2. 在一个世世代代都重男轻女的村庄里,村长决定颁布一条法律,村子里没有生育出儿子的夫妻可以一直生育直到生出儿子为止,假设现在村子上的男女比例是1:1,这条法律颁布之后的若干年后村子的男女比例将会()A、男的多;B、女的多;C、一样多;D、不确定。

[LeetCode] Minimum Depth of Binary Tree

Given a binary tree, find its minimum depth.
The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.
题意:求一棵二叉树的最小高度。最小高度的定义是,根节点到最近的叶子节点的路径上节点的个数。
递归解法
层次遍历法

图解红黑树

红黑树是一种数据结构与算法课堂上常常提到但又不会细讲的树,也是技术面试中经常被问到的树,然而无论是书上还是网上的资料,通常都比较刻板难以理解,能不能一种比较直观的方式来理解红黑树呢?本文将以图形的方式来解释红黑树的插入与删除操作。 对树结构的学习是一个递进的过程,我们通常所接触的树都是二叉树,二叉树简单来说就是每个非叶子节点都有且只有两个孩子,分别叫做左孩子和右孩子。二叉树中有一类特殊的树叫二叉查 … Read more

Java基础知识拾遗

Java Threads 1. 创建线程的三种方法? 继承Thread类; 实现Runnable接口; 使用Executor框架创建一个线程池。 每个线程都有优先级(Thread.MAX_PRIORITY = 10, Thread.NORM_PRIORITY = 5, Thread.MIN_PRIORITY = 1),新产生线程的优先级默认等于产生它的优先级。 JVM启动后,将会产生一个非守护线程 … Read more

[LeetCode] Permutations 排列生成算法之字典序法

字典序排序生成算法 字典序法就是按照字典排序的思想逐一产生所有排列。 例如,由1,2,3,4组成的所有排列,从小到大的依次为: 1234, 1243, 1324, 1342, 1423, 1432, 2134, 2143, 2314, 2341, 2413, 2431, 3124, 3142, 3214, 3241, 3412, 3421, 4123, 4132, 4213, 4231, 4312 … Read more