二叉树遍历最简单的就是递归了。因为递归实质上是栈存了一些中间值,所以我们可以使用stack实现迭代版的遍历。 中序遍历 步骤: 首先将root节点作为当前节点。 1.如果当前节点不为空,压入当前节点。将左节点作为当前节点。 2.否则弹出栈顶节点作为当前节点,输出当前节点。 3.如果右节点不为空,右节 ...
分类:
其他好文 时间:
2017-10-11 21:48:46
阅读次数:
183
如果用2个栈实现,思路比较简单。 第一个栈S1先放结点,第二个栈S2放S1弹出的结点。 实现过程如下: 不由分说先将头节点放入S1。 ① 弹出头节点 ② 依次将头节点的左右孩子压入栈S1。重复①直至栈空。 如果用一个栈实现。我们需要先定位到该树的最左子节点。 关键问题是,对于一个结点,如何判断该节点 ...
分类:
其他好文 时间:
2017-10-07 17:42:38
阅读次数:
134
//1.s型顺序访问二叉树,默认先左后右;利用两个栈来实现;若果先右后左的话,改变一下s1,s2插入的顺序就行 //2.注意s1 s2插入栈的顺序是不同的 void S_LevelOrderPrint(TreeNode t) { stack s1; stack s2; s1.push(t); whi... ...
分类:
编程语言 时间:
2017-09-27 14:52:45
阅读次数:
278
简介 遍历二叉树就是按照某种顺序,将树中的结点都枚举一遍,且每个结点仅仅访问一次。因为树不是线性的结构,遍历不像线性表那样简单,因此他的遍历需要特点的算法来完成。 从某种角度讲,对二叉树的遍历就是将树形结构转换为线性结构的操作。 二叉树的遍历方法主要有如下几种: 先序遍历:先访问root结点,再先序 ...
分类:
其他好文 时间:
2017-09-20 17:52:03
阅读次数:
214
C#实现二叉树的前序、中序、后序遍历。publicclassBinaryTreeNode
{
intvalue;
BinaryTreeNodeleft;
BinaryTreeNoderight;
///<summary>
///前序遍历
///</summary>
///<paramname="tree"></param>
publicstaticvoidPreOrder(BinaryTreeNodetree)
{
i..
题目: Given a binary search tree with non-negative values, find the minimum absolute difference between values of any two nodes. Example: Note: There ar ...
分类:
编程语言 时间:
2017-09-14 21:39:56
阅读次数:
154
/* 后序遍历二叉树 思路: 1,若当前结点没有左右孩子,则访问并出栈 2,若当前结点有左孩子或右孩子,并且孩子被访问过,则访问并出栈(若当前结点有左右孩子,只要有一个孩子已被访问,那么它的两个孩子都已被访问,这与入栈顺序有关,它的孩子在栈中一定在它的上方) 3,若当前结点有左孩子或右孩子,并且都没... ...
分类:
其他好文 时间:
2017-09-07 21:25:04
阅读次数:
121
/* 二叉树先序遍历 思路: 1,先访问当前结点,将其入栈(其可能有右孩子) 2,若其存在左结点,执行1 3,若不存在左结点,则将栈顶元素出栈,若其不存在右孩子,继续出栈,若有右孩子,执行1 */ void pre_Order(BTree T) { InitStack(S); BiTree pCur... ...
分类:
其他好文 时间:
2017-09-07 21:20:42
阅读次数:
152
此处用函数递归的方式对二叉树进行拷贝,从第四行代码开始分析此处if(root == NULL)限定了递归函数终止条件,而返回值为NULL是因为下面对二叉树叶的左右指向进行赋值。 第10和13行,创建了新的节点左子树和右子树,此两条语句用来遍历二叉树中所有的结点,并且接受新创建节点的地址。 从16行开 ...
分类:
编程语言 时间:
2017-09-06 21:29:07
阅读次数:
160