二叉树类代码:

package binarytree;

import linkqueue.LinkQueue;

public class BinaryTree {

	class Node
{
public Object data;
public Node lchild;
public Node rchild; public Node(Object data)
{
this.data = data;
this.lchild = null;
this.rchild = null;
}
} //根节点
private Node root = null;
private Node node = null;
/**
* 创建树
*
* 以完全二叉树的格式来创建(子树不存在的用0填充),
* 对完全二叉树中每一个节点从0开始进行编号,
* 那么第i个节点的左孩子的编号为2*i+1,右孩子为2*i+2。
*
* */
void createTree(String strtree)
{
LinkQueue lQueue = new LinkQueue();
lQueue.initQueue();
/**
* 完全二叉树中第i层的结点的个数最多为第1到i-1层上所有节点的个数和
* 所以父节点的个数最多为N-1个,N表示节点个数
* */
for(int parentIndex =0; parentIndex<strtree.split(" ").length/2;parentIndex++)
{
if(root == null)
{
root= new Node(strtree.split(" ")[parentIndex]);
//左孩子
root.lchild = new Node(strtree.split(" ")[parentIndex*2+1]);
lQueue.enQueue(root.lchild);
//右孩子
root.rchild = new Node(strtree.split(" ")[parentIndex*2+2]);
lQueue.enQueue(root.rchild);
}else
{
if(!lQueue.isEmpty() && parentIndex*2+1<strtree.split(" ").length)//队列不空
{
node = (Node) lQueue.deQueue();
if(parentIndex*2+1<strtree.split(" ").length)
{
//左孩子
node.lchild = new Node(strtree.split(" ")[parentIndex*2+1]);
lQueue.enQueue(node.lchild);
}
if(parentIndex*2+2<strtree.split(" ").length)
{
//右孩子
node.rchild = new Node(strtree.split(" ")[parentIndex*2+2]);
lQueue.enQueue(node.rchild);
}
}else
{
return;
}
}
}
} /**
* 先序遍历二叉树
* */
void preOrderTraverse(Node node)
{
if(node == null)
{
return;
}
visit(node);
preOrderTraverse(node.lchild);
preOrderTraverse(node.rchild);
}
/**
* 中序遍历二叉树
* */
void inOrderTraverse(Node node)
{
if(node == null)
{
return;
}
inOrderTraverse(node.lchild);
visit(node);
inOrderTraverse(node.rchild);
}
/**
* 后序遍历二叉树
* */
void postOrderTraverse(Node node)
{
if(node == null)
{
return;
}
postOrderTraverse(node.lchild);
postOrderTraverse(node.rchild);
visit(node);
} /**
* 打印二叉树
* */
public void print()
{
System.out.print("先序遍历:");
preOrderTraverse(root);
System.out.print("\n中序遍历:");
inOrderTraverse(root);
System.out.print("\n后序遍历:");
postOrderTraverse(root);
} /**
* 访问节点
* */
private void visit(Node node)
{
if(!node.data.equals("0"))
{
System.out.print(node.data+" ");
}
}
}

测试代码(以数据结构中表达式a+b*(c-d)-e/f为例):

package binarytree;

public class BinaryTreeMain {

	public static void main(String[] args) {
BinaryTree binaryTree = new BinaryTree(); String strtree="- + / a * e f 0 0 b - 0 0 0 0 0 0 0 0 0 0 c d";//0表示没有值的位置
binaryTree.createTree(strtree); binaryTree.print();
} }

运行结果:

java创建二叉树并递归遍历二叉树的更多相关文章

  1. JAVA递归、非递归遍历二叉树(转)

    原文链接: JAVA递归.非递归遍历二叉树 import java.util.Stack; import java.util.HashMap; public class BinTree { priva ...

  2. 非递归遍历二叉树Java版的实现代码(没写层次遍历)

    直接上代码呵呵,里面有注解 package www.com.leetcode.specificProblem; import java.util.ArrayList; import java.util ...

  3. 非递归遍历二叉树Java实现

    2018-10-03 20:16:53 非递归遍历二叉树是使用堆栈来进行保存,个人推荐使用双while结构,完全按照遍历顺序来进行堆栈的操作,当然在前序和后序的遍历过程中还有其他的压栈流程. 一.Bi ...

  4. SDUT 3341 数据结构实验之二叉树二:遍历二叉树

    数据结构实验之二叉树二:遍历二叉树 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 已知二叉 ...

  5. SDUT OJ 数据结构实验之二叉树二:遍历二叉树

    数据结构实验之二叉树二:遍历二叉树 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descr ...

  6. SDUT-3441_数据结构实验之二叉树二:遍历二叉树

    数据结构实验之二叉树二:遍历二叉树 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 已知二叉树的一个按先序遍历输入的字符 ...

  7. JAVA递归、非递归遍历二叉树

    前序遍历:1.访问根节点 2.前序遍历左子树 3.前序遍历右子树 中序遍历:1.中序遍历左子树 2.访问根节点 3.中序遍历右子树 后序遍历:1.后序遍历左子树 2.后序遍历右子树 3.访问根节点-- ...

  8. 数据结构之二叉树篇卷三 -- 二叉树非递归遍历(With Java)

    Nonrecursive Traversal of Binary Tree First I wanna talk about why we should <code>Stack</c ...

  9. C++编程练习(17)----“二叉树非递归遍历的实现“

    二叉树的非递归遍历 最近看书上说道要掌握二叉树遍历的6种编写方式,之前只用递归方式编写过,这次就用非递归方式编写试一试. C++编程练习(8)----“二叉树的建立以及二叉树的三种遍历方式“(前序遍历 ...

随机推荐

  1. java 同步 异步

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 同步 就是  讲究顺序 异步 就是  可以同时进行. 不知道那个家伙起得名字.. 讲究 ...

  2. BZOJ2938 POI2000病毒

    我们不能让重复过的字串出现在无限串上(就叫这个了...) 也就是要自动机一直能匹配但就是匹配不到,那么就是在自动机上找一个环. dfs判环即可.注意是个有向图. #include<bits/st ...

  3. logN判点是否在凸多边形内 HRBUSTOJ1429

    就是利用叉积的性质,如果向量A1到向量A2是顺时针则叉积为负反之为正. 然后我们可以二分的判断找到一个点恰被两条射线夹在一起. 然后我们再判断是否l,r这两个点所连直线与点的关系. 具体资料可以参照这 ...

  4. YanghuiTriangle

    Demand 1 用实现循环队列 2 参考PPT用循环队列打印杨辉三角 3 用JDB或IDEA单步跟踪排队情况,画出队列变化图,包含自己的学号信息 4 把代码推送到代码托管平台 5 把完成过程写一篇博 ...

  5. django-附件上传、media、extra、事务

    1 普通上传 1.1 html <form action="/index/" method="post" enctype="multipart/ ...

  6. hdu 1569 最小割

    和HDU 1565是一道题,只是数据加强了,貌似轮廓线DP来不了了. #include <cstdio> #include <cstring> #include <que ...

  7. EXTJS下拉树ComboBoxTree参数提交及回显方法

    http://blog.csdn.net/wjlht/article/details/6085245 使用extjs可以构造出下拉数,但是不方便向form提交参数,在此,笔者想到一个办法,很方便Com ...

  8. (转)Ext.Button点击事件的三种写法

    转自:http://maidini.blog.163.com/blog/static/377627042008111061844345/ ExtJs的写法太灵活了,现在收集了关于Button点击事件的 ...

  9. java 基础数据结构源码详解及数据结构算法

    http://www.cnblogs.com/skywang12345/category/455711.html http://www.cnblogs.com/liqiu/p/3302607.html

  10. 电脑硬件天梯图—CPU、显卡、主板

    看到许多玩家对电脑的配置一点都不懂,这里特地制作了最新的硬件天梯图--CPU,显卡,主板,让大家对电脑硬件孰优孰劣有个一目了然的了解. 看不清楚的情点击小图看大图. 首先是CPU天梯图: 其次是显卡天 ...