用JAVA写二叉树

如何用java实现二叉树~

import java.util.List;
import java.util.LinkedList;

public class Bintrees {
private int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9};
private static List nodeList = null;

private static class Node {
Node leftChild;
Node rightChild;
int data;

Node(int newData) {
leftChild = null;
rightChild = null;
data = newData;
}
}

// 创建二叉树
public void createBintree() {
nodeList = new LinkedList();

// 将数组的值转换为node
for (int nodeIndex = 0; nodeIndex < array.length; nodeIndex++) {
nodeList.add(new Node(array[nodeIndex]));
}

// 对除最后一个父节点按照父节点和孩子节点的数字关系建立二叉树
for (int parentIndex = 0; parentIndex < array.length / 2 - 1; parentIndex++) {
nodeList.get(parentIndex).leftChild = nodeList.get(parentIndex * 2 + 1);
nodeList.get(parentIndex).rightChild = nodeList.get(parentIndex * 2 + 2);
}

// 最后一个父节点
int lastParentIndex = array.length / 2 - 1;

// 左孩子
nodeList.get(lastParentIndex).leftChild = nodeList.get(lastParentIndex * 2 + 1);

// 如果为奇数,建立右孩子
if (array.length % 2 == 1) {
nodeList.get(lastParentIndex).rightChild = nodeList.get(lastParentIndex * 2 + 2);
}
}

// 前序遍历
public static void preOrderTraverse(Node node) {
if (node == null) {
return;
}
System.out.print(node.data + " ");
preOrderTraverse(node.leftChild);
preOrderTraverse(node.rightChild);
}

// 中序遍历
public static void inOrderTraverse(Node node) {
if (node == null) {
return;
}

inOrderTraverse(node.leftChild);
System.out.print(node.data + " ");
inOrderTraverse(node.rightChild);
}

// 后序遍历
public static void postOrderTraverse(Node node) {
if (node == null) {
return;
}

postOrderTraverse(node.leftChild);
postOrderTraverse(node.rightChild);
System.out.print(node.data + " ");
}

public static void main(String[] args) {
Bintrees binTree = new Bintrees();
binTree.createBintree();
Node root = nodeList.get(0);

System.out.println("前序遍历:");
preOrderTraverse(root);
System.out.println();

System.out.println("中序遍历:");
inOrderTraverse(root);
System.out.println();

System.out.println("后序遍历:");
postOrderTraverse(root);
}
}


输出结果:
前序遍历:
1 2 4 8 9 5 3 6 7
中序遍历:
8 4 9 2 5 1 6 3 7
后序遍历:
8 9 4 5 2 6 7 3 1

这是一段代码:就是java树private void jbInit() throws Exception { contentPane = (JPanel) getContentPane(); contentPane.setLayout(null); setSize(new Dimension(450, 350)); setTitle("Welcome to JTree"); // Creating Root node DefaultMutableTreeNode root = new DefaultMutableTreeNode("根节点"); // Creating Parent node DefaultMutableTreeNode parent = new DefaultMutableTreeNode("书籍"); lblNode.setFont(new java.awt.Font("Tahoma", Font.PLAIN, 11)); lblNode.setText("Node Name:"); lblNode.setBounds(new Rectangle(202, 115, 59, 14)); txtNode.setFont(new java.awt.Font("Tahoma", Font.PLAIN, 11)); txtNode.setText(""); txtNode.setBounds(new Rectangle(322, 112, 117, 20)); txtName.setFont(new java.awt.Font("Tahoma", Font.PLAIN, 11)); contentPane.setMaximumSize(new Dimension(600, 400)); contentPane.setPreferredSize(new Dimension(600, 400)); root.add(parent); // Creating Leaf nodes DefaultMutableTreeNode java = new DefaultMutableTreeNode("Java"); parent.add(java); DefaultMutableTreeNode complete = new DefaultMutableTreeNode( "Complete Reference"); java.add(complete); DefaultMutableTreeNode professional = new DefaultMutableTreeNode( "Java Programming"); java.add(professional); DefaultMutableTreeNode advanced = new DefaultMutableTreeNode( "Advanced Java Programming"); java.add(advanced); DefaultMutableTreeNode oracle = new DefaultMutableTreeNode("Oracle"); parent.add(oracle); DefaultMutableTreeNode learn = new DefaultMutableTreeNode( "Learning Oracle"); oracle.add(learn); DefaultMutableTreeNode sql = new DefaultMutableTreeNode("Learning SQL"); oracle.add(sql); DefaultMutableTreeNode plsql = new DefaultMutableTreeNode( "Learning SQL/PLSQL"); oracle.add(learn); DefaultMutableTreeNode program = new DefaultMutableTreeNode( "Learning Programming"); oracle.add(program); DefaultMutableTreeNode jsp = new DefaultMutableTreeNode("JSP"); parent.add(jsp); DefaultMutableTreeNode jsp1 = new DefaultMutableTreeNode("Learning JSP"); jsp.add(jsp1); DefaultMutableTreeNode jsp2 = new DefaultMutableTreeNode( "Programming In JSP"); jsp.add(jsp2); DefaultMutableTreeNode leaf = new DefaultMutableTreeNode("C#"); parent.add(leaf); DefaultMutableTreeNode programming = new DefaultMutableTreeNode( "Programming In C#"); leaf.add(programming); // Creating another Branch node parent = new DefaultMutableTreeNode("软件"); root.add(parent); // Creating Leaf nodes leaf = new DefaultMutableTreeNode("Operating System"); parent.add(leaf); DefaultMutableTreeNode dosObj = new DefaultMutableTreeNode("MS-DOS"); leaf.add(dosObj); DefaultMutableTreeNode windowsObj = new DefaultMutableTreeNode( "Windows 2000 Server"); leaf.add(windowsObj); DefaultMutableTreeNode winObj = new DefaultMutableTreeNode( "Windows 2000 Professional"); leaf.add(winObj); leaf = new DefaultMutableTreeNode("Database"); parent.add(leaf); DefaultMutableTreeNode accessObj = new DefaultMutableTreeNode( "MS-Access"); leaf.add(accessObj); DefaultMutableTreeNode mssqlObj = new DefaultMutableTreeNode( "MS-SQL Server"); leaf.add(mssqlObj);

/**
* [Tree2.java] Create on 2008-10-20 下午03:03:24
* Copyright (c) 2008 by iTrusChina.
*/

/**
* @author WangXuanmin
* @version 0.10
*/
public class Tree2Bef {
private StringBuffer bef=new StringBuffer();

//传入中序遍历和后序遍历,返回前序遍历字串
public String getBef(String mid, String beh) {
//若节点存在则向bef中添加该节点,继续查询该节点的左子树和右子树
if (root(mid, beh) != -1) {
int rootindex=root(mid, beh);
char root=mid.charAt(rootindex);
bef.append(root);
System.out.println(bef.toString());
String mleft, mright;
mleft = mid.substring(0,rootindex);
mright = mid.substring(rootindex+1);
getBef(mleft,beh);
getBef(mright,beh);
}
//所有节点查询完毕,返回前序遍历值
return bef.toString();

}

//从中序遍历中根据后序遍历查找节点索引值index
private int root(String mid, String beh) {
char[] midc = mid.toCharArray();
char[] behc = beh.toCharArray();
for (int i = behc.length-1; i > -1; i--) {
for (int j = 0; j < midc.length; j++) {
if (behc[i] == midc[j])
return j;
}
}
return -1;
}

public static void main(String[] args) {
Tree2Bef tree=new Tree2Bef();
String mid="84925163A7B";
String bef="894526AB731";
System.out.println(tree.getBef(mid,bef));
}
}

树结构如图:
1
|-------|
2 3
|---| |---|
4 5 6 7
|-| |-|
8 9 A B

大家帮他写啊! 没空ing

java 构建二叉树
答:首先我想问为什么要用LinkedList 来建立二叉树呢? LinkedList 是线性表,树是树形的, 似乎不太合适。其实也可以用数组完成,而且效率更高.关键是我觉得你这个输入本身就是一个二叉树啊,String input = "ABCDE F G";节点...

Java二叉树构造问题 要求:从控制台输入一行扩展二叉树的字符串,然后根...
答:树类:package tree;import java.util.List;public class Tree { private int parentId;private int id;private String showStr;private String Spaces="";public Tree() { // TODO Auto-generated constructor stub } pu...

java编程 二叉树
答:要遍历此二叉树,先要建立一个二叉树,用C语言编写如下:(暂时可以不用理解,参考一下)/* Note:Your choice is C IDE */ include "stdio.h"define size sizeof(struct list)struct list { int data;struct list *...

用JAVA写二叉树
答:/ [Tree2.java] Create on 2008-10-20 下午03:03:24 Copyright (c) 2008 by iTrusChina./ / author WangXuanmin version 0.10 / public class Tree2Bef { private StringBuffer bef=new StringBuffer();//传入...

java二叉树前序方法增加一个新的节点,然后把另一个节点的数据插入到这...
答:于是,实际上这个问题也就转化成了如何遍历二叉树?很显然,遍历二叉树是可以有多种方式的,如:前序遍历(递归/非递归)、中序遍历(递归/非递归)、后序遍历(递归/非递归)、层次遍历等等。下面我将给出使用递归前序...

Java数据结构二叉树深度递归调用算法求内部算法过程详解
答:二叉树 1 2 34 5 6 7这个二叉树的深度是3,树的深度是最大结点所在的层,这里是3.应该计算所有结点层数,选择最大的那个。根据上面的二叉树代码,递归过程是:f(1)=f(2)+1 > f(3) +1 ? f(2) ...

利用JAVA 先序建立二叉树 #表示空树。例如输入ABC##DE#G##F### 先...
答:static Node CreateTree()// 先序建立二叉树 { Node node = null;if (ch[i] == '#') { node = null;i++;}else { node = new Node();node.data = ch[i];i++;node.left = CreateTree();node.Right ...

Java二叉树问题,下面的代码求解释.
答:这应该算是一种递归的排序算法。class Node类为定义一个二叉树节点。这个节点包含左右子树,但是左右子树可以为空。insert方法就是递归算法的实现。首先第一个值被创建为根节点。此后再插入的节点如果比当前节点小(当前节点不...

java二叉树家谱实现
答:mport java.awt.BorderLayout;import java.awt.Dimension;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.Random;import javax.swing.JButton;import javax.swing.JFrame;import javax...

编程初学者,想用JAVA做一个二叉树界面,求指点。
答:建议你先再java中使用swing做一个这样的JTextField或者JTextArea组成的结构。你可以先new一个JPanel上面使用GridLayout(7,15)布局管理器,依次add组件。空白位置add(new JPanel()),需要文本框覆盖的位置add文本框或者文本域...

IT评价网,数码产品家用电器电子设备等点评来自于网友使用感受交流,不对其内容作任何保证

联系反馈
Copyright© IT评价网