package com.tree.bitree;
public class BinTree {
static abstract class Visitor{
void visit(Object obj) {
System.out.print(obj+" ");
}
}
protected Node root;
private int size;
private static class Node{
int data;
Node right;
Node left;
public Node(int data){
this.data= data;
}
public String toString() {
return "number="+data;
}
}
public void createBinTree(int nums[]) {
root=reCreateTree(nums,0);
}
public Node reCreateTree(int[] nums,int index) {
if(nums[index]!=0) {
size++;
Node rootNode=new Node(nums[index]);
//rootNode.data=nums[index];
if((index+1)*2<=nums.length) {
rootNode.left = (Node)reCreateTree(nums,(index+1)*2-1);
if((index+1)*2+1<=nums.length) { rootNode.right = (Node) reCreateTree(nums,(index+1)*2); }
}
return rootNode;
}
return null;
}
public void createFullBintree(int numCount) {
root=reCreateFullBintree(1,numCount);
}
private Node reCreateFullBintree(int index,int numCount) {
size++;
Node rootNode=new Node(index);
if(index*2<=numCount) {
rootNode.left=(Node)reCreateFullBintree(index*2,numCount);
if(index*2+1<=numCount) rootNode.right=(Node)reCreateFullBintree(index*2+1,numCount);
}
return (Node)rootNode;
}
public int Size() {
return size;
}
public int getLift() {
Node e=root;
while(e.right !=null) {
e=e.right;
}
return e.data;
}
public void preOrder(Visitor v) {
preOrder(v,root);
}
private void preOrder(Visitor v,Node Root) {
if(Root!=null){
v.visit(Root.data);
preOrder(v,Root.left);
preOrder(v,Root.right);
}
}
public void infexOrder(Visitor v) {
inOrder(v,root);
}
private void inOrder(Visitor v,Node Root) {
if(Root != null) {
inOrder(v,Root.left);
v.visit(Root.data);
inOrder(v,Root.right);
}
}
public void postOrder(Visitor v) {
postOrder(v,root);
}
private void postOrder(Visitor v,Node Root) {
if(Root != null) {
postOrder(v,Root.left);
postOrder(v,Root.right);
v.visit(Root);
}
}
public void postFOrder(Visitor v) {
postFOrder(v,root);
}
private void postFOrder(Visitor v,Node Root) {
if(Root != null) {
postFOrder(v,Root.right);
postFOrder(v,Root.left);
v.visit(Root);
}
}
public void outPutData(){
disPlay(root);
}
public void disPlay(Node Root) {
if(Root!=null)
{
System.out.print(Root.data);
System.out.print(" ");
disPlay(Root.left);
disPlay(Root.right);
}
}
public static void main(String[] args) {
BinTree bintree=new BinTree();
bintree.createFullBintree(15);
System.out.println("SIze:"+bintree.Size());
System.out.println (bintree.getLift());
bintree.preOrder(new Visitor() {});
System.out.println();
bintree.infexOrder(new Visitor() {});
System.out.println();
bintree.postOrder(new Visitor() {});
System.out.println();
bintree.postFOrder(new Visitor() {});
System.out.println();
bintree.outPutData();
System.out.println("");
bintree=new BinTree();
int[] nums=new int[] { 1, 2, 3, 4, 0, 0, 5, 0, 6, 0, 0, 0, 0, 7, 8 };
bintree.createBinTree(nums);
System.out.println("SIze: "+bintree.Size());
System.out.println(bintree.getLift());
bintree.preOrder(new Visitor() {});
System.out.println();
bintree.infexOrder(new Visitor() {});
System.out.println();
bintree.postOrder(new Visitor() {});
System.out.println();
bintree.postFOrder(new Visitor() {});
System.out.println();
}
}
分享到:
相关推荐
java实现二叉树非递归前序中序后序遍历
Java实现二叉树的基本操作
java实现二叉树数据结构,简单明了,免费下载
java实现二叉树遍历demo,一个简单是实例
Java实现的,将树形层级结构的数据转换成表格,通过打点的方式向表格中插入数据,支持行头表格、列头表格、交叉表格三种形式
Java实现二叉树,Java实现队列.pdf
java实现2叉树 的一些简单的算法 例如 删除 插入 查找
Java实现二叉树的相关操作.
java实现二叉树最佳方法。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
Java实现二叉树中序线索化 左键画节点 右键画跟 点可以拖动 两个节点可以连线 确认进行线索化 并画出线索
Ztree+treeTable实现 Java实现 树形菜单 树形表格 有丰富的实例 和官方开发文档,也有官方api 不懂的可以查询官方api,实现很简单,按照实例做就可以
java实现二叉树的遍历,包括前序中序后序遍历,递归和非递归实现。
Java 菜单树的实现,可以很方便的移植到其他程序,方便使用,而且具有代表性.
java二叉树实现 (简单实现,入门用) /**创建二叉树*/ public BinaryTree createTree(String treeStr); /**寻找结点*/ public BinaryTree findNode(BinaryTree tree ,char sign); /**找所给结点的左子树*/ ...
java用队列实现的二叉树程序//入队 public void enqueue(E e); //出队 public E dequeue(); //取队列第一个 public E front(); //队列是否为空 public boolean isEmpty(); //队列大小 public int size...
用java实现二叉树的创建和遍历
Java实现二叉树的先序、中序、后续、层次遍历,经验证可用版本,方便各种找工作面试笔试
简单的描述了JAVA实现二叉树