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);
        }
    }

     

     

     

  • 相关阅读:
    创业日志N,一听到别人说创业我就怕
    《创业维艰分享之五》所有得,有所乐,日事日清,循序渐进。
    创业维艰--分享技术人做产品与做市场的一些经验
    创业维艰--最艰难的时候
    angular js 在ie11 下的get请求缓存问题的解决办法
    《创业维艰-分享创业中遇到的困难之二》----破局
    xwalk_core_library-15.44.384 .13.aar 百度云分享
    linux常用命令
    Merge into 用法
    多线程的并发控制
  • 原文地址:https://www.cnblogs.com/advanceBlog/p/7900685.html
Copyright © 2011-2022 走看看