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实现二叉树的最佳方法依赖于对二叉树性质的深入理解以及对Java语言特性的熟练应用。递归构建和遍历是实现二叉树的两个核心方面,它们共同构建了复杂二叉树算法的基石。在实际应用中,还需要考虑树结构的...
java实现二叉树数据结构,简单明了,免费下载
【Java实现二叉树】 在Java中,二叉树是一种数据结构,由多个节点组成,每个节点最多有两个子节点,通常分为左子节点和右子节点。二叉树的节点通常包含一个值以及指向其左子节点和右子节点的引用。在提供的代码中,...
本示例"java实现二叉树遍历demo"将通过一个简单的实例来演示这三种遍历方式。 1. **前序遍历**: 前序遍历的顺序是:根节点 -> 左子树 -> 右子树。在代码实现中,通常采用递归的方法。首先访问根节点,然后递归地...
Java实现的,将树形层级结构的数据转换成表格,通过打点的方式向表格中插入数据,支持行头表格、列头表格、交叉表格三种形式
java实现2叉树 的一些简单的算法 例如 删除 插入 查找
以上就是Java实现二叉树的基本操作,包括创建、插入、删除和搜索节点,以及遍历二叉树的方法。这些操作为处理各种算法问题提供了基础,如二叉搜索树、平衡二叉树、堆等。掌握二叉树的原理和实现对于提升编程能力至关...
Java实现二叉树中序线索化 左键画节点 右键画跟 点可以拖动 两个节点可以连线 确认进行线索化 并画出线索
### Java实现二叉树遍历算法详解 #### 一、引言 在计算机科学中,二叉树是一种常用的数据结构,广泛应用于各种算法和数据处理场景。为了更好地理解和操作二叉树,掌握其遍历算法至关重要。本文将详细介绍如何使用...
这篇博客“java实现树的一般操作”可能涵盖了如何在Java中创建和管理树结构的基本概念和方法。下面,我们将深入探讨这些知识点。 首先,我们来看`TreeNode.java`。这个文件很可能是定义了一个树节点类,它代表了树...
### Java 实现二叉树的遍历 #### 一、数据结构分类 在计算机科学领域,数据结构可以按照逻辑结构和存储结构进行分类。 - **逻辑结构**: - **集合**:没有逻辑上的关系,如集合中的元素彼此独立。 - **线性结构*...
在讲解Java实现二叉树的先序、中序、后序、层次遍历时,我们需要先了解几个关键知识点。 首先,二叉树是一种非常基础且重要的数据结构,每个节点最多有两棵子树,通常称这两棵子树为“左子树”和“右子树”。二叉树...
Java 菜单树的实现,可以很方便的移植到其他程序,方便使用,而且具有代表性.
在Java开发中,构建用户界面时,树形菜单和树形表格是常见且重要的组件,它们可以帮助用户以层次结构的方式浏览和操作数据。本篇将详细介绍如何利用Ztree和treeTable来实现这样的功能。 Ztree是一款基于JavaScript...
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实现二叉树的创建和遍历。 首先,我们需要创建一个二叉树节点类`FOBiTree.java`,它包含以下属性和方法: 1. `char data`: 存储节点的值,例如字符。 2. `FOBiTree lNode`: 指向左子树...