leetcode307. Range Sum Query - Mutable

2018-03-08
阅读 5 分钟
2.3k
最开始我们有两种直观的想法,一种是在插入时同时更新后面所有的和,这意味着O(n)的插入复杂度和O(1)的读取复杂度。我决定选择第二种方式,也就是采用类似日志的形式记录下每一次的变更。这样当我们读取的时候,再遍历日志,将相关的变更结果添加到当前的数值上。缺点是,变更很多以及数组很庞大时,效率依然很差。

leetcode297. Serialize and Deserialize Binary Tree

2018-03-04
阅读 3 分钟
2.2k
设计一个方法将一个二叉树序列化并反序列化。序列化是指将对象转化成一个字符串,该字符串可以在网络上传输,并且到达目的地后可以通过反序列化恢复成原来的对象。

leetcode235-236 lowest common ancestor

2018-01-10
阅读 3 分钟
2.1k
现在有一棵搜索二叉树,这个二叉树的特点是左子树的节点一定小于根节点,而右子树的节点一定大于根节点。现在提供这棵树的根节点,并且输入两个节点,问这两个节点的最低共同父节点是谁?最低共同父节点是指两个节点在沿父节点向上爬升时遇到的第一个共同父节点,同时它也允许父节点就是其本身,比如在上图中2和4的最低...

leetcode222. Count Complete Tree Nodes

2017-09-06
阅读 2 分钟
2.4k
题目要求 {代码...} 计算一个完全二叉树的节点个数。其中完全二叉树是指除了最后一行,其余的每一行都必须是满节点的树。 思路一 :不讲道理的递归 直接返回左子树和右子树的叶结点的个数。当然超时啦 {代码...} 思路二:讲道理的递归 思路一很明显没有充分利用这是一颗完全二叉树的条件。从另一个角度看,一颗完全二叉...

leetcode116-117. Populating Next Right Pointers in Each Node

2017-08-05
阅读 2 分钟
1.7k
给一个完全二叉树,将当前节点的next值指向其右边的节点。而在II中则是提供了一个不完全的二叉树,其它需求没有发生改变。额外的需求包括O(1)的空间复杂度

leetcode101. Symmetric Tree

2017-07-21
阅读 2 分钟
1.4k
通过栈的形式同样可以实现比较。将需要进行比较的节点依次压入栈中。每次从栈中取出两个进行比较的节点比较。有点像level traversal的思路。

leetcode98. Validate Binary Search Tree

2017-07-20
阅读 2 分钟
1.5k
我们可以发现,如果已知当前节点的值val以及取值的上下限upper,lower,那么左子节点的取值范围就是(lower, val),右子节点的取值范围就是(val, upper)。由此出发递归判断,时间复杂度为O(n)因为每个节点只需要遍历一次。

leetcode98. Validate Binary Search Tree

2017-07-20
阅读 2 分钟
1.6k
如果了解中序遍历的同学可以知道,一颗二叉查找树的中序遍历结果应当是一个数值有小到大递增的数组。正因为中序遍历是指先遍历左子树,接着遍历中间节点,再遍历右子树,恰好和查找树的值递增顺序相同。因此在这里我们采用栈的方式实现中序遍历,通过研究中序遍历是否递增来判断二叉查找树是否符合规则。代码如下:

leetcode98. Validate Binary Search Tree

2017-07-20
阅读 2 分钟
1.3k
如果了解中序遍历的同学可以知道,一颗二叉查找树的中序遍历结果应当是一个数值有小到大递增的数组。正因为中序遍历是指先遍历左子树,接着遍历中间节点,再遍历右子树,恰好和查找树的值递增顺序相同。因此在这里我们采用栈的方式实现中序遍历,通过研究中序遍历是否递增来判断二叉查找树是否符合规则。代码如下: