二叉树的构建与显示

这里只实现二叉树的增加节点和输出功能。

要实现二叉树排序,其节点数据必须实现Comparable接口。

package org.lyk.entities;

public class Book implements Comparable<Book>
{
    private String name;
    private double price;

    public Book(String name,double price)
    {
        super();
        this.name = name;
        this.price = price;
    }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public double getPrice()
    {
        return price;
    }

    public void setPrice(double price)
    {
        this.price = price;
    }

    @Override
    public String toString()
    {
        return "Book [name=" + name + ", price=" + price + "]";
    }

    @Override
    public int compareTo(Book o)
    {
        if(this.price < o.price)
            return -1;
        else if(this.price > o.price)
            return 1;
        else
            return 0;
    } 

}

实现二叉树:

package org.lyk.entities;

public class BinaryTree<T>
{
    private class Node
    {
        private Comparable<T> data;
        private Node left;
        private Node right;

        private Node(Comparable<T> data)
        {
            this.data = data;
        }

        @SuppressWarnings("unchecked")
        private void add(Comparable<T> data)
        {
            if(this.data.compareTo((T) data) < 0)
            {
                if(this.right == null)
                    this.right = new Node(data);
                else
                    this.right.add(data);
            }
            else
            {
                if(this.left == null)
                    this.left = new Node(data);
                else
                    this.left.add(data);
            }
        }

        private void get(Object[] retVal)
        {
            if(this.left != null)
                this.left.get(retVal);

            retVal[BinaryTree.this.foot++] = this.data;

            if(this.right != null)
                this.right.get(retVal);
        }
    }
    //=======================================
    private Node root;
    private int count;
    private int foot;
    public void add(Comparable<T> data)
    {
        if(this.root == null)
            this.root = new Node(data);
        else
            this.root.add(data);

        this.count++;
    }

    public Object[] toArray()
    {
        if(this.root == null)
            return null;

        Object[] retVal = new Object[this.count];
        this.foot = 0;
        this.root.get(retVal);
        return retVal;
    }
}

测试代码:

package org.lyk.main;

import org.lyk.entities.*;
import org.lyk.interfaces.*;

import java.math.*;
import java.sql.*;
import java.text.*;
import java.util.*; 

public class Main
{
    public static void main(String[] args)
    {
        Book[] books = new Book[]
        {
            new Book("Java编程思想", 73.8),
            new Book("Java从入门到精通", 40.7),
            new Book("疯狂Java讲义(第3版 附光盘)", 91.3),
            new Book("O‘Reilly:Head First Java", 47.3),
            new Book("Java Web整合开发王者归来", 78.8)
        };

        BinaryTree<Book> bt = new BinaryTree<>();
        for(Book item : books)
        {
            bt.add(item);
        }
        Object[] result = bt.toArray();
        for(Object item : result)
        {
            System.out.println(item);
        }
    }
}
时间: 2024-08-07 12:28:12

二叉树的构建与显示的相关文章

数据结构之二叉树的构建C++版

二叉树的构建要注意与链式表的区别,二叉树这里的构建十分低级,每个树只是构建了一个单一的二叉树节点,总体来看是有下向上构建的.用户需要手动去构建自己需要的树,而不是直接去插入数据就到二叉树中了,因为不是链式结构的单一,二叉树十分丰富的. 提一下遍历: 迭代的方式遍历十分简单.先序.中序.后序遍历都只是针对根节点.比如中序,就是先遍历左子树-->根节点-->右子树.(根节点在中间) /* 1) 树的基本概念: 度:说白了就是节点拥有的子分支数 叶子节点:说白了就是度为0的节点 双亲:说白了就是父亲

java实现二叉树的构建以及3种遍历方法

转载自http://ocaicai.iteye.com/blog/1047397 大二下学期学习数据结构的时候用C介绍过二叉树,但是当时热衷于java就没有怎么鸟二叉树,但是对二叉树的构建及遍历一直耿耿于怀,今天又遇见这个问题了,所以花了一下午的时间来编写代码以及介绍思路的文档生成! 目录: 1.把一个数组的值赋值给一颗二叉树 2.具体代码 1.树的构建方法 2.具体代码 Java代码   package tree; import java.util.LinkedList; import jav

java实现二叉树的构建以及3种遍历方法(转)

转 原地址:http://ocaicai.iteye.com/blog/1047397 大二下学期学习数据结构的时候用C介绍过二叉树,但是当时热衷于java就没有怎么鸟二叉树,但是对二叉树的构建及遍历一直耿耿于怀,今天又遇见这个问题了,所以花了一下午的时间来编写代码以及介绍思路的文档生成! 目录: 1.把一个数组的值赋值给一颗二叉树 2.具体代码 1.树的构建方法 2.具体代码 Java代码   package tree; import java.util.LinkedList; import 

jenkins 构建时显示git分支插件、显示构建分支插件

参数化构建分支 1.安装插件:Git Parameter 2.找到我们在Jenkins中建立的工程,勾选“参数化构建过程”,并如下配置 3.在“源码管理”中如下配置 Jenkins构建完显示构建用户和构建分支 1.Jenkins上安装两个插件:description setter plugin(user build vars,显示构建账号,我没用到) 2.在Jenkins的系统管理---全局安全配置中找到标记格式器(Mark formatter) 将纯文本设置为 Safe HTML 3.找到我们

Java实现二叉树的构建与遍历

转载:http://ocaicai.iteye.com/blog/1047397 目录: 1.把一个数组的值赋值给一颗二叉树 2.具体代码 1.树的构建方法 2.具体代码 Java代码   package tree; import java.util.LinkedList; import java.util.List; /** * 功能:把一个数组的值存入二叉树中,然后进行3种方式的遍历 * * 参考资料0:数据结构(C语言版)严蔚敏 * * 参考资料1:http://zhidao.baidu.

线索二叉树的构建和遍历------小甲鱼数据结构和算法

#include <stdio.h> #include <stdlib.h> typedef char ElemType; // 线索存储标志位 // Link(0):表示指向左右孩子的指针 // Thread(1):表示指向前驱后继的线索 typedef enum {Link, Thread} PointerTag; typedef struct BiThrNode { char data; struct BiThrNode *lchild,*rchild; PointerTag

小甲鱼数据结构和算法-----二叉树的构建和前序遍历

题目要求:建立二叉树并输出每个字符所在的层数.如下图要求输出 A 在第一层 B.C 在第二层 D.E在第三层 代码如下: #include <stdio.h> #include <stdlib.h> typedef struct BiTNode { char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; // 创建一棵二叉树,约定用户遵照前序遍历的方式输入数据 void CreateBiTree(BiTree *T)

8606 二叉树的构建及遍历操作

时间限制:1000MS  内存限制:1000K 题型: 编程题   语言: 无限制 描述 构造二叉链表表示的二叉树:按先序次序输入二叉树中结点的值(一个字符),'#'字符表示空树,构造二叉链表表示的二叉树T:再输出三种遍历序列.本题只给出部分代码,请补全内容. #include "stdio.h" #include "malloc.h" #define TRUE 1 #define FALSE 0 #define OK  1 #define ERROR  0 #de

jenkins 构建历史 显示版本号

0   jenkins 安装此插件: 此插件名为 " groovy postbuild " 1  效果图: 2   安装插件: 系统管理 --> 插件管理 --> 可选插件 --> 查找"groovy postbuild" --> 安装 3   Job 配置: 构建后操作步骤 -- > Groovy Postbuild --> 填写如下内容 --> 应用 && 保存 --> 构建之后 可以看到结果 ma