java数据结构:二叉树

树:树形结构的特点是一个节点可有多个直接后继,是一种常用的非线性结构。

二叉树:结合了有序数组和链表的优点,在树中查找数据和在有序数组中查找一样快,增删数据和在链表中一样快。

插入操作时,二叉树从根节点开始,比父节点大的往左边插入,比父节点小的往右边插入

下面是链表实现二叉树:

Node.java

package BTree;

/**
 * 链表二叉树的节点类
 */
public class Node {
    int data;
    Node leftChild;
    Node rightChild;
    //初始化根节点
    public Node(){
        data = 0;
        leftChild = null;
        rightChild = null;
    }
    //初始化节点
    public Node(int data){
        this.data = data;
        leftChild = null;
        rightChild = null;
    }
}

LinkOfBTree.java

package BTree;

/**
 * @author
 * 链表实现二叉树
 * 三种遍历方式:先根遍历,中根遍历,后根遍历
 */
public class LinkOfBTree {
    Node root = null;
    //初始化二叉树
    public LinkOfBTree(int data){
        root = new Node(data);
    }

    //新增节点
    public void add(int data){
        Node node = new Node(data);
        Node temp = root;
        while(true){
            if(temp.data >= data){
                if(temp.leftChild != null)
                    temp = temp.leftChild;
                else {
                    temp.leftChild = node;
                    break;
                }
            }else{
                if(temp.rightChild != null)
                    temp = temp.rightChild;
                else{
                    temp.rightChild = node;
                    break;
                }
            }
        }
    }

    /**打印二叉树:递归
     *node:初始数据为根节点*
     *先根遍历
    */
    public void displayRootFirst(Node node){
        System.out.println("节点值:"+node.data);
        if(node.leftChild != null)
            displayRootFirst(node.leftChild);
        if(node.rightChild != null)
            displayRootFirst(node.rightChild);
    }

    /**
     * 中根遍历二叉树
     */
    public void displayRootMid(Node node){
        if(node.leftChild != null)
            displayRootMid(node.leftChild);
        System.out.println("节点值:"+node.data);
        if(node.rightChild != null)
            displayRootMid(node.rightChild);
    }

    /**
     * 后根遍历二叉树
     */
    public void displayRootLast(Node node){
        if(node.leftChild != null)
            displayRootLast(node.leftChild);
        if(node.rightChild != null)
            displayRootLast(node.rightChild);
        System.out.println("节点值:"+node.data);
    }

    public static void main(String[] a){
        LinkOfBTree tree = new LinkOfBTree(10);
        tree.add(8);
        tree.add(7);
        tree.add(3);
        tree.add(11);
        tree.add(3);
        tree.add(20);
        tree.add(26);
        tree.add(11);
        System.out.println("------先根遍历------");
        tree.displayRootFirst(tree.root);
        System.out.println("------中根遍历------");
        tree.displayRootMid(tree.root);
        System.out.println("------后根遍历------");
        tree.displayRootLast(tree.root);
    }
}
时间: 2024-10-29 06:46:40

java数据结构:二叉树的相关文章

(2)Java数据结构--二叉树 -和排序算法实现

=== 注释:此人博客对很多个数据结构类都有讲解-并加以实例 Java API —— ArrayList类 & Vector类 & LinkList类Java API —— BigDecimal类Java API —— BigInteger类Java API —— Calendar类Java API —— DateFormat类Java API —— Date类Java API —— HashMap类 & LinkedHashMap类Java API —— JDK5新特性Java

Java数据结构-二叉树及其遍历

二叉树的定义:n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互相不相交的.分别称为根结点的左子树和右子树的二叉树组成. 二叉树的特点: 0<=度<=2: 左右子树是有顺序的,不能颠倒: 不论有几棵子树,也要区分它是左子树还是右子树. 二叉树的五种基本形态: 空二叉树: 只有一个根结点: 根结点只有左子树: 根结点只有右子树: 根结点既有左子树又有右子树. 举例3个结点的二叉树的形态有: 下面说一些特殊的二叉树. 斜树:所有的结点都只有左子树的二叉

Java数据结构——二叉树的递归与非递归遍历(DFS)

二叉树的遍历分为递归遍历和非递归遍历 一.递归实现前.中.后序遍历Node.java: public class Node { private Object data; Node richild; Node lechild; public Object getData() { return data; } public void setData(Object data) { this.data = data; } public Node getRichild() { return richild

java数据结构(二叉树)

Node节点: 1 public class Node { 2 public long data; 3 public String sData; 4 public Node leftChild; 5 public Node rightChild; 6 public Node(long data,String sData) { 7 this.data = data; 8 this.sData = sData; 9 } 10 } Tree: 1 public class Tree { 2 publi

Java数据结构——二叉树

前序遍历——根 左 右 中序遍历——左 根 右 后序遍历——左 右 根

java数据结构与算法之树基本概念及二叉树(BinaryTree)的设计与实现

[版权申明]未经博主同意,不允许转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/53727333 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制) java数据结构与算法之栈(Stack)设

Java数据结构之树和二叉树

从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ Java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的几章,我们将会分别讲解这几种数据结构,主要也是通过Java代码的方式来讲解相应的数据结构. 今天要讲解的是:Java线性结构 Java数据结构之树形结构 之前我们前几章学习的都是Java数据结构的线性结构,都是一对一的,从现在开始我们将要学习Java的树形结构. 树对于我们来普通Java程序员而言,

Java数据结构之二叉搜索树

Java数据结构之二叉搜索树 1.二叉搜索树组成 二叉搜索树又称为二叉排序树,它或者是一颗空树,或者是一颗具有如下特性的非空二叉树,需要满足一下三个条件: (1)若它的左子树非空,则左子树上所有结点的关键字均小于根结点的关键字: (2)若它的右子树非空,则右子树上所有结点的关键字均大于(可以等于)根结点的关键字. (3)左子树右子树本身又各是一颗二叉搜索树 在算法描述中,均以结点值的比较来代表其关键字的比较,因为若结点的值为类类型时,该类必须实现系统提供的java.lang.comparable

java数据结构与算法之顺序表与链表深入分析

转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52953190 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 ??数据结构与算法这门学科虽然在大学期间就已学习过了,但是到现在确实也忘了不少,因此最近又重新看了本书-<数据结构与算法分析>加上之前看的<java数据结构>也算是对数据结构的进一步深入学习了,于是也就打算

Java数据结构与算法(第一章综述)

数据结构和算法能起到什么作用? 数据结构是对在计算机内存中(有时在磁盘中)的数据的一种安排.数据结果包括数组.链表.栈.二叉树.哈希表等等.算法对这些结构中的数据进行各种处理,例如,查找一条特殊的数据项或对数据进行排序. 可用于下面三类情况: 现实数据存储 程序员的工具 建模 数据结构的特性: 数据结构 优点 缺点 数组 插入快,如果知道下标,可以非常快地存取 查找慢,删除慢,大小固定 有序数组 比无序的数组查找快 删除和插入慢,大小固定 栈 提供后进先出的方式存取 存取其他项很慢 队列 提供先