对于树的遍历操作,通常使用递归的方式写起来比较简单。但是偶尔也可以尝试一下非递归的写法。
public void preOrder(Node t) {
if (t == null)
return;
Stack<Node> stack = new Stack<Node>();
Stack<Node> remain = new Stack<Node>();
while (true) {
System.out.print((t.value + " "));
stack.push(t);
if (t.left != null) {
if (t.right != null) {
remain.push(t.right);
}
t = t.left;
} else if (t.right != null) {
t = t.right;
} else if (!remain.isEmpty()) {
while (stack.peek().right != remain.peek()) {
stack.pop();
}
t = remain.pop();
} else {
break;
}
}
}
分享到:
相关推荐
tree_traversing.java是主类里边包括根据父结点-子节点形式的输入生成树的链式表示及对链式表示进行非递归的先序遍历请下载其中用到的表示树的两个类源码tree_node.java和runtime_tree_node.java
用C++写的二叉树先序遍历、中序遍历和后序遍历非递归算法
用C++写的,包括二叉树的构建,二叉树的先序遍历、中序遍历和后序遍历非递归算法。
数据结构基于C++语言程序开发的树的非递归先序遍历 if (p->rchild != NULL)/* 右孩子入栈 */ { top++; stack[top] = p->rchild; } if (p->lchild != NULL)/* 左孩子入栈 */ { top++; stack[top] = p->...
要求能够输入树的各个结点,并能够输出用不同方法遍历的遍历序列;分别建立建立二叉树存储结构的的输入函数、输出层序遍历序列的函数、输出先序遍历序列的函数;
用户以先序遍历的方式键入二叉树各结点的数据域值(字符型),程序建立二叉树,然后分别用递归和非递归算法对二叉树进行遍历。每访问一个结点即打印该结点的数据域值。
先序遍历的非递归算法C语言二叉树前序、中序、后序三种遍历的非递归算法和递归算法最精悍版
编写先序遍历二叉树的非递归算法程序,要求: (1)以二叉链表建立二叉树。 (2)输出遍历的结点序列。 (3)有实例验算。
C,二叉树中的非递归的先序遍历 (附带算法说明书word)利用栈数据结构实现二叉树中的非递归的先序遍历。
tree_traversing.java附件tree_node.java还需下载runtime_tree_node,tree_traversing.java
二叉树的几种操作,包括递归先序建立二叉树、先序遍历、中序遍历、后序遍历、非递归的各种遍历、计算叶子节点数目和所有节点数目,使用队列实现二叉树的层次遍历.zip
主要介绍了C#非递归先序遍历二叉树的实现方法,具有一定参考借鉴价值,需要的朋友可以参考下
先序遍历非递归算法(C语言) 多种遍历方法
非递归先序遍历二叉树: 非递归中序遍历二叉树: 非递归后序遍历二叉树: 非递归中序遍历二叉树(算法2): 层次遍历二叉树: 递归计算单分支结点: 递归计算双分支结点: 递归计算叶子数: 二叉数的深度:...
1.先序遍历非递归算法#define maxsize 100typedef struct{ Bitree Elem[maxsize]; int top;}SqStack;void PreOrderUnrec(Bitree t){ SqStack s; StackInit(s); p=t; while (p!=null || !StackEmpty(s)) { while (p!=...
二叉树先序、中序、后序遍历非递归算法,简述了二叉树的基本算法。
(1)二叉树的建立 (2)求出二叉树的高度 (3)求出二叉树结点个数 (4)先序遍历递归实现 (5)先序遍历非递归实现 (6)求出二叉树叶子结点个数
包含一下方法: 1.通过一个数组来构造一颗...6.使用非递归 先序遍历一棵二叉树 7.使用非递归 中序遍历一棵二叉树 8.使用非递归 后序遍历一棵二叉树 PS:代码为C++代码 可以直接下载使用!!! PS2:每句代码都有详细注释
C语言实现二叉树的前序遍历(非递归),下载下来看看哦!