题目:http://ac.jobdu.com/problem.php?pid=1385思路:前序遍历结果的第一个数字就是根节点,找到根节点在中序遍历中的位置,则该位置左边的即为左子树的中序遍历的结果。显然我们很容易就可以得到左右子树的前序和中序遍历结果,我们可以使用递归来构建。小知识:preorde...
分类:
其他好文 时间:
2015-04-08 12:25:26
阅读次数:
124
二叉树的遍历原因:将序列编程图或者二叉树的形式,确实很直观。但是,最终的处理是交给计算机,计算机的处理只有判断、循环等,也就是只可以处理先行序列。而二叉树的遍历就是将序列的树结构编程线性序列,将线性序列交给计算机处理。二叉树的遍历大致分为四种:前序遍历、中序遍历、后序遍历,层序遍历。前序遍历(从上向下):从根节点开始并且取根节点值,遍历根节点的所有左子树以及左子树的所有节点,然后再进行根节点的右子树...
分类:
其他好文 时间:
2015-04-07 17:50:10
阅读次数:
135
前序遍历:先访问跟结点,然后遍历左子树,最后遍历右子树。即“根左右”。
实现代码:
class Solution {
public:
vector preorderTraversal(TreeNode *root) {
if (root==NULL) {
return vector();
}
vector resu...
分类:
其他好文 时间:
2015-04-07 17:49:55
阅读次数:
120
一个二叉排序树的某两个节点颠倒了为了,去恢复它。
不可思议的是这道题居然被标记为了hard,其实难度远低于其他的hard或medium。
思路:中序遍历,然后看是不是递增的,如果不是,记录下来。注意,可能有一次逆序,也可能有两次,一次的发生在相邻节点。
注意,中序遍历是这样的:
void f(node * root){
if(root==NULL)
return;
f...
分类:
其他好文 时间:
2015-04-06 18:46:16
阅读次数:
119
题目链接:https://leetcode.com/problems/binary-tree-inorder-traversal/(非递归实现)二叉树的中序遍历。 1 class Solution 2 { 3 public: 4 vector inorderTraversal(TreeNod...
分类:
其他好文 时间:
2015-04-05 23:29:30
阅读次数:
149
思路:(1)需要了解前序遍历和和中序遍历的特点,前序遍历第一个元素即为根节点,然后再在中序遍历以这个根节点为界限得到宏观上的左子串和右子串,如下图(2)又可以将截取的子串分为新的子串问题,从而可以通过迭代来解决,(3)构建左子树:主要就是指针的运用,获取前序遍历左子串的起始地址和子串长度,中序遍历左...
分类:
其他好文 时间:
2015-04-05 20:14:13
阅读次数:
141
思路:
由于二叉排序树的中序遍历序列是有序的,所以考虑在遍历的过程中通过判断遍历序列是否有序从而来判断该排序树是否有效,但这又涉及到第一个元素的问题,所以可以设一个比Integer.MAX_INT还小的值作为参考值或者设一个flag来判断是否是第一个值,第一个值直接跳过即可。...
分类:
其他好文 时间:
2015-04-04 21:15:48
阅读次数:
118
题目:
Given inorder and postorder traversal of a tree, construct the binary tree.Note:
You may assume that duplicates do not exist in the tree.
根据二叉树的中序遍历和后续遍历结果构造二叉树。思路分析:
这道题和上道题《 Leetcode: Constr...
分类:
其他好文 时间:
2015-04-04 00:02:22
阅读次数:
180
题目:
Given preorder and inorder traversal of a tree, construct the binary tree.Note:
You may assume that duplicates do not exist in the tree.
根据前序遍历和中序遍历结果构造二叉树。思路分析:
分析二叉树前序遍历和中序遍历的结果我们发现:
二叉树中序遍...
分类:
其他好文 时间:
2015-04-03 22:32:25
阅读次数:
234