一道HULU的笔试题(How I wish yesterday once more)假设有棵树,长下面这个样子,它的前序遍历,中序遍历,后续遍历都很容易知道。PreOrder: GDAFEMHZInOrder: ADEFGHMZPostOrder: AEFDHZMG现在,假设仅仅知道前序和中...
分类:
其他好文 时间:
2015-08-17 21:32:22
阅读次数:
121
leetcode105通过二叉树的先序和中序,或者先序和后序遍历可以重建这棵二叉树。由先序遍历可以找出二叉树的根节点的值,再去中序/后序遍历中将节点分为左子树和右子树的节点。一般地,有迭代和递归两种方法去重建一棵二叉树。递归比较耗时,而且确定边界时容易出错,以下代码采用迭代,时间复杂度O(n),n为...
分类:
其他好文 时间:
2015-08-17 21:31:19
阅读次数:
88
#include#include#include#include#includeusing namespace std;struct node{ int key; node *left, *right;};void insertTree(node* &root,int val){ node* tmp...
分类:
其他好文 时间:
2015-08-16 10:44:47
阅读次数:
122
这两个问题实际上是同一个问题,需要对三种遍历方式的规律非常清楚。对于前序遍历,第一个元素实际上就是root,然后后面的元素前半部分是左树的node,后半部分是右树的node对于中序遍历,一旦我们知道了root节点,那么就可以将其分为两半部分,也就是左树和右树对于后序遍历,我们可以缺点最后一个节点是r...
分类:
其他好文 时间:
2015-08-15 19:50:05
阅读次数:
128
Invert a binary tree.
4
/ 2 7
/ \ / 1 3 6 9
to
4
/ 7 2
/ \ / 9 6 3 1
解题思路:类似于后序遍历的思想,递归的思想,先完成左子树的交换,再完成右子树的交换,再将根节点的左右子树交换。
未优化代码如下:...
分类:
其他好文 时间:
2015-08-13 01:18:13
阅读次数:
136
最近在学习java的数据结构与算法知识,看到数据结构 树的遍历的方式。在理解过程中。查看到一篇文章,视野非常有深度,在信息论的角度看待这个问题。在此贴出该文章的链接以及内容。 【文章出处】http://www.bina...
分类:
编程语言 时间:
2015-08-12 23:47:41
阅读次数:
681
首先非常感谢‘hicjiajia’的博文:二叉树后序遍历(非递归)这篇随笔开启我的博客进程,成为万千程序员中的一员,坚持走到更远!折磨了我一下午的后序遍历中午得到解决,关键在于标记右子树是否被访问过,考虑过修改二叉树结点的数据结构,增加一个visit域,或者建一个栈存储已访问的结点。都比较麻烦没有调...
分类:
编程语言 时间:
2015-08-11 20:59:51
阅读次数:
147
一:前言二叉树的遍历方法分四种:前序,中序,后序以及层次遍历。其中,前中后遍历方法的实现分递归和非递归,非递归遍历的实现需要借助于栈。实际上,递归的调用就是一种栈的实现,所以,非递归遍历就需要人工借助栈结构来实现。而层次遍历需要借助队列。二:前中后序遍历递归遍历:递归遍历的思想和方法很简单,通过调整...
分类:
编程语言 时间:
2015-08-11 00:03:14
阅读次数:
232
#include using namespace std;bool isPostorderOfBST(int postorder[], int low, int high){ if(postorder == NULL || low = 0 && postorder[pivot] > posto...
分类:
编程语言 时间:
2015-08-10 21:48:58
阅读次数:
162
#include
#include
#define Data_Type char
typedef struct Node{
Data_Type data;
Node * lchird;
Node * rchird;
}NODE, *PNODE;
PNODE create();
void preOrderTraverse(PNODE);
void inOrderTraverse(PNOD...
分类:
编程语言 时间:
2015-08-10 14:55:55
阅读次数:
375