zoukankan      html  css  js  c++  java
  • 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);
        }
    }

     

     

     

  • 相关阅读:
    BZOJ3997:[TJOI2015]组合数学(DP,Dilworth定理)
    BZOJ4807:車(组合数学,高精度)
    BZOJ4008:[HNOI2015]亚瑟王(DP,概率期望)
    BZOJ1499:[NOI2005]瑰丽华尔兹(DP,单调队列)
    洛谷1514 引水入城
    洛谷 1018 乘积最大
    八数码难题
    CODEVS 1069关押罪犯
    CODEVS 1067 机器翻译
    洛谷 P1417 烹调方案
  • 原文地址:https://www.cnblogs.com/advanceBlog/p/7900685.html
Copyright © 2011-2022 走看看