递归遍历比较简单,本文主要总结非递归遍历。前序遍历前序遍历按照“根结点-左孩子-右孩子”的顺序进行访问。
对于任一结点P:
访问结点P,并将结点P入栈;
判断结点P的左孩子是否为空,若为空,则取栈顶结点并进行出栈操作,并将栈顶结点的右孩子置为当前的结点P,循环至1);若不为空,则将P的左孩子置为当前的结点P;
直到P为NULL并且栈为空,则遍历结束。
void preorder(TreeNode...
分类:
其他好文 时间:
2015-07-17 18:48:34
阅读次数:
110
递归完成树的遍历很好理解,倘若是非递归,不要告诉我算法导论上有,我要maker的思考过程
既然递归能够实现,那就模拟递归。递归的本质就是压栈。
首先简单树,观察递归的压栈过程
A、B即使节点的数据也代表节点的地址。
对这棵树使用递归完成前序创建#include
using namespace std;
struct treenode;
typedef struct...
分类:
编程语言 时间:
2015-07-17 16:24:55
阅读次数:
172
题目链接:http://poj.org/problem?id=3784题目大意:依次输入n个数,每当输入奇数个数的时候,求出当前序列的中位数(排好序的中位数)。 此题可用各种方法求解。 排序二叉树方法,每个结点保存以其为根的左右子树中数的个数。如果数据出的够严格,这种方法会被卡的,除非是通过动态.....
分类:
其他好文 时间:
2015-07-17 11:58:06
阅读次数:
130
35. 蛤蟆的数据结构笔记之三十五遍历二叉树
本篇名言:“冬天已经到来,春天还会远吗? --雪莱”
我们来看徐璈如何遍历二叉树。
欢迎转载,转载请标明出处:
1. 二叉树遍历
二叉树的遍历有三种方式,如下:
(1)前序遍历(DLR),首先访问根结点,然后遍历左子树,最后遍历右子树。简记根-左-右。
(2)中序遍历(LDR),首先遍历左子树,然后...
分类:
其他好文 时间:
2015-07-17 09:54:48
阅读次数:
124
题目1385:重建二叉树时间限制:1 秒内存限制:32 兆特殊判题:否提交:4419解决:1311题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2...
分类:
其他好文 时间:
2015-07-15 11:01:21
阅读次数:
164
样例题目来自LintCode, 给出中序遍历:[1,2,3]和前序遍历:[2,1,3]. 返回如下的树: 2
/ 1 3代码实现/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int va...
分类:
其他好文 时间:
2015-07-11 18:39:04
阅读次数:
137
最近SLQ正在讲二分……感觉NOIP连考两年二分(聪明的质检员、借教室)也真是……二分加前序和,水过。//NOIRP:题目没说用long long啊,出题人你坑我= =//出题人:(怪我咯?)10^9*10^6你不会算? 1 #include 2 using namespace std; 3 con...
分类:
其他好文 时间:
2015-07-10 22:05:10
阅读次数:
116
对于一颗二叉树,可以根据先序遍历(或者后序遍历)和中序遍历(树中不含重复的数字)重新还原出二叉树。
解析:
1. 先序遍历序列的第一个元素必定是根节点,可以由此获取二叉树的根节点。
2. 根据根节点,在中序遍历序列中查找该节点,由中序遍历的性质可知,中序遍历中该根节点左边的序列必定在根节点的左子树中,而根节点右边的序列必定在右子树中。由此可以知道先序遍历中左子树以及右子树的起止位置。
3. 找到了左右子树前序遍历和中序遍历再用同样的方法分别构建左右子树,典型的递归思想。...
分类:
其他好文 时间:
2015-07-09 18:00:45
阅读次数:
345
前序工作:添加项目,给账户充钱require 'net/http'url = URI.parse('http://116.255.240.184/do.aspx')response = Net::HTTP.post_form(url,{'action' => 'loginIn','uid'=>'1'...
分类:
移动开发 时间:
2015-07-09 11:11:38
阅读次数:
170