Binary Tree Traversal Iteratively

二叉树的迭代遍历 递归版的二叉树遍历十分简单,可谓名副其实的 Clean Code。如果不是为了面试,恐怕没有几个人会选择使用迭代来完成二叉树的前序、中序、后序遍历。 现场手写迭代版本的二叉树遍历并非易事,所以本文旨在找出最优、最容易理解的算法模板,帮助大家记忆迭代版本的代码。 前序和后序遍历 首先,我们来整理一下前序遍历迭代版的思路。前序遍历的顺序为: 根 -> 左 -> 右 即访问过根节点之后,先访问左节点再访问右节点,根据栈 FILO(先进后出)的特性,那么再访问完根节点后,先将右子节点压栈,再将左子节点压栈即可。迭代版的代码就不难写出了: //...

3 minute read

Two Sum

Two Sum 这一题怎样用一句话描述 从给定的数组中找出两个不同元素的下标,使得这两个元素的和为目标值。 用到什么算法和什么数据结构 用到了暴力法或哈希算法,用到了数组作为数据结构。 很容易想到 O(n2) 时间复杂度的算法:用两个循环,遍历数组内所有可能的亮亮组合,最坏情况下 O(n2) 的时间内就可以找到解。可以很容易给出如下代码片段(注意 j 是从 i+1 开始迭代,这是因为题目要求不能使用同一个元素):...

5 minute read

一次经典的 C++ 排错过程

最近在看 C++ Primer 英文第四版,其中有一章节讲到了模板类的成员函数该怎么写,并且给出了一个队列(Queue)的例子,源代码可以参考这里。 我使用了 VSCode 插件商城里的 Create Makefile 插件生成了 Makefile,但是编译的时候却报了如下错误: liuchushudeMBP:Queue liuchushu$ make all...

3 minute read

推荐 Mac OS X 上的代理软件 ShadowsocksX-NG

最近在学习 Coursera 上的设计模式课程,由于课程有一个大作业(Capstone Project)需要编写 Android 软件,于是不得不把卸载多年的 Android Studio 又安装了起来。 用过 Android Studio 的朋友都知道,在没有代理的情况下,基本上所有的 SDK 工具都需要去国内镜像下载,十分麻烦。幸亏看到了这篇文章,终于知道了...

1 minute read

Construct Binary Tree From In-order and Post-order Traversal

问题描述 通过二叉树的中序和后序遍历结果,构造这棵二叉树。 注意: 树中不存在值重复的节点。 例如,给出如下中序和后序遍历结果: inorder = [9,3,15,20,7] postorder = [9,15,7,20,3] 构造出以下二叉树: 3 / \...

2 minute read

Path Sum

问题描述 给出一棵二叉树以及一个总和 sum,判断这棵二叉树中,是否存在一条从根节点到叶子树节点的路径,其路径上所有节点的值之和正好等于这个 sum。 例如,给出下图所示的二叉树,以及 sum = 22: 5 / \ 4 8 / /...

2 minute read

Symmetric Tree

How to summarize this question in one sentence? Judge whether a tree is symmetric or...

2 minute read