http://bbs.tarena.com.cn/archiver/tid-231693.html
http://www.ccidedu.com/art/1925/20040923/158319_1.html
public class BinaryNode {
private int value;//current value
private BinaryNode lChild;//left child
private BinaryNode rChild;//right child
public BinaryNode(int value, BinaryNode l, BinaryNode r){
this.value = value;
this.lChild = l;
this.rChild = r;
}
public BinaryNode getLChild() {
return lChild;
}
public void setLChild(BinaryNode child) {
lChild = child;
}
public BinaryNode getRChild() {
return rChild;
}
public void setRChild(BinaryNode child) {
rChild = child;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
//iterate all node.
public static void iterate(BinaryNode root){ //这个遍历方法和中序遍历一样
if(root.lChild!=null){
iterate(root.getLChild());
}
System.out.print(root.getValue() + " ");
if(root.rChild!=null){
iterate(root.getRChild());
}
}
/**
* add child to the current node to construct a tree.
* Time: O( nlog(n) )
* **/
public void addChild(int n){ //创建二叉树
if(n<value){
if(lChild!=null){
lChild.addChild(n);
}
else{
lChild = new BinaryNode(n, null, null);
}
}
else{
if(rChild!=null){
rChild.addChild(n);
}
else{
rChild = new BinaryNode(n, null, null);
}
}
}
//test case.
public static void main(String[] args){
System.out.println();
int[] arr = new int[]{23,54,1,65,9,3,100};
BinaryNode root = new BinaryNode(arr[0], null, null); //根结点
for(int i=1; i<arr.length; i++){
root.addChild(arr[i]); //构造二叉树
}
BinaryNode.iterate(root); //1 3 9 23 54 65 100
System.out.println("*****************");
root.preorder(root); //23 1 9 3 54 65 100 先序
root.inorder(root); //1 3 9 23 54 65 100 中序
root.postorder(root); //3 9 1 100 65 54 23 后序
}
public void preorder(BinaryNode p){ //先根次序遍历二叉树
if(p!=null){
System.out.print(p.value+" ");
preorder(p.lChild);
preorder(p.rChild);
}
}
public void inorder(BinaryNode p){ //中根次序遍历二叉树
if(p!=null){
inorder(p.lChild);
System.out.print(p.value+" ");
inorder(p.rChild);
}
}
public void postorder(BinaryNode p){ //后根次序遍历二叉树
if(p!=null){
postorder(p.lChild);
postorder(p.rChild);
System.out.print(p.value+" ");
}
}
}
分享到:
相关推荐
二叉树的遍历有多种方式,本文将介绍二叉树的递归遍历,中序遍历,先序遍历和后序遍历。 递归遍历是指使用递归函数来遍历二叉树的每个结点。递归遍历的优点是代码简洁易懂,但缺点是可能会导致堆栈溢出。在本文的...
用C++写的二叉树先序遍历、中序遍历和后序遍历非递归算法
用C++写的,包括二叉树的构建,二叉树的先序遍历、中序遍历和后序遍历非递归算法。
数据结构课程 一般是老师布置作业 小型的代码 二叉树的遍历方法 先序、中序、后序遍历法
数据结构C++二叉链表的先序遍历、中序遍历和后序遍历实现
数据结构二叉树链式结构的前序遍历,中序遍历,后序遍历用递归的方法,层级遍历采用队列结构
### 二叉树先序、中序、后序遍历非递归算法 #### 前言 在计算机科学中,二叉树是一种常见的数据结构,它被广泛应用于各种算法和程序设计中。二叉树的遍历是理解并操作二叉树的基础,通常有三种主要的遍历方式:...
常见的二叉树遍历方法有三种:先序遍历、中序遍历和后序遍历。下面我们将讨论这三种遍历方法的非递归算法。 一、先序遍历非递归算法 先序遍历是指先访问根结点,然后访问左子树,最后访问右子树。非递归算法使用栈...
本程序实现了三种主要的二叉树遍历方法:先序遍历、中序遍历和后序遍历。以下是关于这些遍历方法的详细解释: 1. 先序遍历(Preorder Traversal): - 访问根节点。 - 对左子树进行先序遍历。 - 对右子树进行...
二叉树是计算机科学中一种重要的数据结构,它由节点(或称为顶点)组成,每个节点最多有两个子节点,通常分别称为左子节点和右子节点。...通过练习和实践,你可以更好地理解和掌握二叉树遍历的技巧。
数据结构中二叉树的先序遍历,中序遍历,后续遍历的递归和非递归的算法
根据给定文件的信息,本文将详细介绍二叉树的创建及三种基本的递归遍历方法:先序遍历、中序遍历和后序遍历。 ### 一、二叉树的基本概念 二叉树是一种非线性数据结构,每个节点最多有两个子节点,通常称为左子节点...
在这个场景下,"VC二叉树先序创建中序先序后序遍历"指的是使用VC++实现二叉树的构造,并通过先序、中序和后序遍历方法来操作这个数据结构。 **二叉树的创建:** 在VC++中,我们可以定义一个二叉树节点结构体或类,...
二叉树的遍历通常分为三种:前序遍历(根左右)、中序遍历(左根右)和后序遍历(左右根)。通常情况下,我们都是通过递归的方式来实现这些遍历方法,但是递归方式可能会导致大量的函数调用开销,甚至可能导致栈溢出...
根据以上知识点,我们可以总结出该实验报告主要涉及构建二叉树(特别是基于先序和中序遍历序列),以及利用栈实现二叉树的后序遍历算法。在实现过程中,采用了C语言的结构体和指针操作,以及标准输入输出函数。这些...
在计算机科学中,二叉树是一种常见的...对于实际的编程实现,你需要根据提供的代码和数据进行调整,确保逻辑正确,并遵循二叉树遍历的规则。在进行这类问题的解决时,理解和熟悉二叉树的性质以及各种遍历方法至关重要。
二叉树遍历是计算机科学中处理树结构数据时常用的一种技术,主要分为四种类型:先序遍历、中序遍历、后序遍历和宽度优先遍历。这些遍历方法各有特点,适用于不同的场景。 1. **先序遍历**: - **递归实现**:先...
在二叉树中,我们可以根据遍历顺序分为三种主要类型:前序遍历(根-左-右),中序遍历(左-根-右)和后序遍历(左-右-根)。 **先序建立二叉树**: 先序遍历的顺序是根节点-左子树-右子树。利用这个顺序,我们可以...
在数据结构和算法领域,二叉树遍历是基础且重要的操作,主要用于访问和处理二叉树中的所有节点。本文将详细介绍二叉树的先序、中序和后序遍历,以及如何通过递归和非递归(迭代)的方式来实现这些遍历方法。 **先序...