java实现二叉树的问题

请问:用Java该如何实现二叉树的问题?~

这是一段代码:
就是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);

写好了,代码如下,自己运行下,看下是否符合你的要求:


public class Test
{
static Node root;

static class Node
{
Node left;
Node right;
char data;

Node(char data)
{
this.data = data;
}
}

public static void main(String[] args)
{
String content = "welcomeyou";
for(int i=0;i<content.length();i++)
{
root = insert(root, content.charAt(i));
}

System.out.println("先序遍历结果如下:");
perorder(root);
System.out.println("中序遍历结果如下:");
inorder(root);
System.out.println("后序遍历结果如下:");
postorder(root);
}

public static Node insert(Node node, char data)
{
if(node == null)
node = new Node(data);
else
{
if(node.data > data)
node.left = insert(node.left,data);
else
node.right = insert(node.right,data);
}
return node;
}

public static void perorder(Node node)
{
if (node == null)
return;

System.out.println(node.data);
if (node.left != null)
perorder(node.left);
if (node.right != null)
perorder(node.right);
}

public static void inorder(Node node)
{
if (node == null)
return;

if (node.left != null)
inorder(node.left);

System.out.println(node.data);

if (node.right != null)
inorder(node.right);
}

public static void postorder(Node node)
{
if (node == null)
return;

if (node.left != null)
postorder(node.left);
if (node.right != null)
postorder(node.right);

System.out.println(node.data);
}
}

/**
* 二叉树测试二叉树顺序存储在treeLine中,递归前序创建二叉树。另外还有能
* 够前序、中序、后序、按层遍历二叉树的方法以及一个返回遍历结果asString的
* 方法。
*/

public class BitTree {
public static Node2 root;
public static String asString;

//事先存入的数组,符号#表示二叉树结束。
public static final char[] treeLine = {'a','b','c','d','e','f','g',' ',' ','j',' ',' ','i','#'};

//用于标志二叉树节点在数组中的存储位置,以便在创建二叉树时能够找到节点对应的数据。
static int index;

//构造函数
public BitTree() {
System.out.print("测试二叉树的顺序表示为:");
System.out.println(treeLine);
this.index = 0;
root = this.setup(root);
}

//创建二叉树的递归程序
private Node2 setup(Node2 current) {
if (index >= treeLine.length) return current;
if (treeLine[index] == '#') return current;
if (treeLine[index] == ' ') return current;
current = new Node2(treeLine[index]);
index = index * 2 + 1;
current.left = setup(current.left);
index ++;
current.right = setup(current.right);
index = index / 2 - 1;
return current;
}

//二叉树是否为空。
public boolean isEmpty() {
if (root == null) return true;
return false;
}

//返回遍历二叉树所得到的字符串。
public String toString(int type) {
if (type == 0) {
asString = "前序遍历:\t";
this.front(root);
}
if (type == 1) {
asString = "中序遍历:\t";
this.middle(root);
}
if (type == 2) {
asString = "后序遍历:\t";
this.rear(root);
}
if (type == 3) {
asString = "按层遍历:\t";
this.level(root);
}
return asString;
}

//前序遍历二叉树的循环算法,每到一个结点先输出,再压栈,然后访问它的左子树,
//出栈,访问其右子树,然后该次循环结束。
private void front(Node2 current) {
StackL stack = new StackL((Object)current);
do {
if (current == null) {
current = (Node2)stack.pop();
current = current.right;
} else {
asString += current.ch;
current = current.left;
}
if (!(current == null)) stack.push((Object)current);
} while (!(stack.isEmpty()));
}

//中序遍历二叉树
private void middle(Node2 current) {
if (current == null) return;
middle(current.left);
asString += current.ch;
middle(current.right);
}

//后序遍历二叉树的递归算法
private void rear(Node2 current) {
if (current == null) return;
rear(current.left);
rear(current.right);
asString += current.ch;
}

}

/**
* 二叉树所使用的节点类。包括一个值域两个链域
*/

public class Node2 {
char ch;
Node2 left;
Node2 right;

//构造函数
public Node2(char c) {
this.ch = c;
this.left = null;
this.right = null;
}

//设置节点的值
public void setChar(char c) {
this.ch = c;
}

//返回节点的值
public char getChar() {
return ch;
}

//设置节点的左孩子
public void setLeft(Node2 left) {
this.left = left;
}

//设置节点的右孩子
public void setRight (Node2 right) {
this.right = right;
}

//如果是叶节点返回true
public boolean isLeaf() {
if ((this.left == null) && (this.right == null)) return true;
return false;
}
}

一个作业题,里面有你要的东西。
主函数自己写吧。当然其它地方也有要改的。

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

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

java二叉树前序方法增加一个新的节点,然后把另一个节点的数据插入到这...
答:叶子节点:没有孩子节点的节点也就是说,当我们明白了叶子节点的定义后,只需要遍历一遍二叉树,把符合这种条件(左孩子节点和右孩子节点都为NULL的节点)的节点统计出来就可以了。于是,实际上这个问题也就转化成了如何遍历...

用java建立二叉树
答:import java.util.ArrayList;// 树的一个节点 class TreeNode { Object _value = null; // 他的值 TreeNode _parent = null; // 他的父节点,根节点没有PARENT ArrayList _childList = new ArrayList(); // 他...

建立一个二叉树,附带查询代码,JAVA代码
答:import java.util.ArrayList;// 树的一个节点 class TreeNode { Object _value = null; // 他的值 TreeNode _parent = null; // 他的父节点,根节点没有PARENT ArrayList _childList = new ArrayList(); // 他...

如何用Java的方式设计一个后序线索二叉树的方法?
答:在Java中,你可以定义一个类来表示后序线索二叉树,其中包含有头节点、尾节点和当前节点指针。你可以使用递归或迭代方法遍历整棵树,并创建线索,即存储前驱和后继节点的指针。当访问到叶子节点时,需要将尾节点的指针指向它...

java 求二叉树的叶子结点,下面的代码不知道哪里出错了!
答:我看了一下,知道lz的错误在哪了。createbintree方法中。以lz的讲的先输入a、再输入三回车,也就是当前只有一个节点a。下面就以楼主的数据来讲一下函数所走流程 1.可是当楼主输入a之后,按完第一个回车 当前取得的数据...

用JAVA写二叉树
答: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 ...

急求java实现二叉树遍历程序 多少分都行 啊
答:在JAVA中实现二叉树,程序如下(转载)// //filename: BinaryTreeTest.java //purpose: test a binarytree with java //date: 2002/12/18 //author: flyfan //ver: 0.1 // public class BinaryTreeTest { public...

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

联系反馈
Copyright© IT评价网