思路:
这道题想了好久,知道用中序遍历来解决,用一个list将遍历的元素存储起来一下就解决了,但是空间复杂度不行。具体怎么解决,如何控制程序的终止困扰了我好久。知道我想起来至多用O(h) memory,我想到了直接把一趟遍历后返回开始之前的所有元素存储起来不就正好符合题目要求了么,bravo!...
分类:
其他好文 时间:
2015-04-03 17:34:15
阅读次数:
189
思路:
1.将中序遍历序列和其对应的下标存储到一个map中,方便下面的查找
2.递归选取前序序列的第一个元素作为树的根节点,然后查找根节点在前序序列中位置inorderIndex,inorderIndex-startInorder可以得到左子树的长度
3.根据左子树的长度和startPreOrder可以求出前序序列中左子树的起始位置
4.从上面可以求出左右子树的前序序列和中序序列的起始位置,递归调用建树过程即可。
PS:其实,对于这道题,有更简单的方法,可根据按前序序列元素出现的顺序依次作为树的根节点进行...
分类:
其他好文 时间:
2015-04-03 15:17:20
阅读次数:
133
思路:
1.将中序遍历序列和其对应的下标存储到一个map中,方便下面的查找
2.递归选取后序序列的倒数第一个元素作为树的根节点,然后查找根节点在后序序列中位置inorderIndex,endInorder-inorderIndex可以得到右子树的长度
3.根据右子树的长度和endPreOrder可以求出后序序列中右子树的起始位置
4.从上面可以求出左右子树的后序序列和中序序列的起始位置,递归调用建树过程即可。...
分类:
其他好文 时间:
2015-04-03 15:16:31
阅读次数:
89
什么也不说了,直接上代码。首先是节点类,大家都懂得/** * 二叉树的节点类 * * @author HeYufan * * @param */class Node>{ /** * 节点储存的值 */ private T data; /** * 左子节点 */ private Node...
分类:
编程语言 时间:
2015-04-03 06:45:14
阅读次数:
207
表达式的表示如图所示的二叉树表达式:a+b*(c-d)-e/f若先序遍历此二叉树,按访问结点的先后次序将结点排列起来,其先序序列为: (波兰式,前缀表达式) -+a*b-cd/ef按中序遍历,其中序序列为:a+b*c-d-e/f (中缀表达式)按后序遍历,其后序序列为:abcd-*+ef/-(逆波兰...
分类:
其他好文 时间:
2015-04-03 00:05:23
阅读次数:
184
题目:
Given a binary tree, return the inorder traversal of its nodes’ values.For example:
Given binary tree {1,#,2,3}, 1
2
/
3
return [1,3,2].Note: Recursive solution is trivial, c...
分类:
其他好文 时间:
2015-04-02 20:53:56
阅读次数:
141
链接:https://leetcode.com/problems/symmetric-tree/
此题就是判断一棵二叉树是否为对称二叉树,刚开始以为中序遍历输出,然后看是否是为回文字串,但是这种思路是错了,如[1,2,3,#,3,#,2].
代码如下:
通过循环递归判断左孩子的左子树与右孩子的右子树 及 左孩子的右子树与右孩子的左子树即可得到结果。
class Solution {
pub...
分类:
其他好文 时间:
2015-04-02 18:52:21
阅读次数:
143
Java实现二叉树及相关遍历方式
在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。
二叉树常被用于实现二叉查找树和二叉堆。
以下用Java实现对二叉树的先序遍历,中序遍历,后序遍历,广度优先遍历,深度优先遍历。
转摘请注明:http://blog.csdn.net/qiuzhping/article/details/44830369...
分类:
编程语言 时间:
2015-04-02 13:29:04
阅读次数:
210
题目链接:https://leetcode.com/problems/validate-binary-search-tree/
就是判断一个给定的二叉树是否为二叉查找树。
我的思路是:先将该树中序遍历一遍,按中序遍历的顺序保存到一个vector中,然后判断vector中的顺序即可。
代码:
class Solution {
public:
void inOrder(TreeNode...
分类:
其他好文 时间:
2015-04-02 10:29:28
阅读次数:
107
原理:
1.将中序表达式变化后续表达式
2.当前字符为数字,将该数字放入栈中
3.当前字符为操作符,从栈中取出两个树,根据操作符来运算,将运算结果放入到栈中
4.重复,直到将字符操作完,此时栈中只剩下一个元素,即要运算的结果
PS:我没有处理,只可以运行10以内的运算,如果有需要可以扩展
package com....
分类:
编程语言 时间:
2015-04-01 20:01:53
阅读次数:
149