zoukankan      html  css  js  c++  java
  • 二叉树

    普通的二叉树

    节点类:

    package ds;
    
    /**
     * Created by clearbug on 2018/3/6.
     *
     * 二叉树节点
     */
    public class TreeNode {
    
        private String key;
    
        private TreeNode leftChild;
    
        private TreeNode rightChild;
    
        public TreeNode(String key) {
            this.key = key;
        }
    
        public String key() {
            return key;
        }
    
        public TreeNode getLeftChild() {
            return leftChild;
        }
    
        public void setLeftChild(TreeNode leftChild) {
            this.leftChild = leftChild;
        }
    
        public TreeNode getRightChild() {
            return rightChild;
        }
    
        public void setRightChild(TreeNode rightChild) {
            this.rightChild = rightChild;
        }
    }
    

    二叉树类:

    package ds;
    
    /**
     * Created by clearbug on 2018/3/6.
     *
     * 二叉树
     */
    public class BinaryTree {
    
        public static void main(String[] args) {
            BinaryTree biTree = new BinaryTree();
            biTree.init();
            biTree.preOrderTraverse();
            biTree.inOrderTraverse();
            biTree.postOrderTraverse();
        }
    
        private TreeNode root;
    
        public BinaryTree() {
            root = new TreeNode("root");
        }
    
        /**
         * 初始化一颗二叉树
         */
        public void init() {
            TreeNode node = root;
    
            TreeNode rootLeftChild = new TreeNode("left");
            TreeNode rootRightChild = new TreeNode("right");
            root.setLeftChild(rootLeftChild);
            root.setRightChild(rootRightChild);
    
            TreeNode leftLeftChild = new TreeNode("left-left");
            TreeNode leftRightChild = new TreeNode("left-right");
            rootLeftChild.setLeftChild(leftLeftChild);
            rootLeftChild.setRightChild(leftRightChild);
    
            TreeNode rightLeftChild = new TreeNode("right-left");
            TreeNode rightRightChild = new TreeNode("right-right");
            rootRightChild.setLeftChild(rightLeftChild);
            rootRightChild.setRightChild(rightRightChild);
        }
    
        private void traverse(TreeNode node, int order) {
            switch (order) {
                case 0: // 先序
                    System.out.println(node.key());
                    if (node.getLeftChild() != null) {
                        traverse(node.getLeftChild(), order);
                    }
                    if (node.getRightChild() != null) {
                        traverse(node.getRightChild(), order);
                    }
                    break;
                case 1: // 中序
                    if (node.getLeftChild() != null) {
                        traverse(node.getLeftChild(), order);
                    }
                    System.out.println(node.key());
                    if (node.getRightChild() != null) {
                        traverse(node.getRightChild(), order);
                    }
                    break;
                case 2: // 后序
                    if (node.getLeftChild() != null) {
                        traverse(node.getLeftChild(), order);
                    }
                    if (node.getRightChild() != null) {
                        traverse(node.getRightChild(), order);
                    }
                    System.out.println(node.key());
                    break;
                default: // 未知
                    System.out.println("未知遍历顺序值:" + order);
            }
        }
    
        /**
         * 先序遍历
         */
        public void preOrderTraverse() {
            System.out.println("先根序遍历:");
            traverse(root, 0);
        }
    
        /**
         * 中序遍历
         */
        public void inOrderTraverse() {
            System.out.println("中根序遍历:");
            traverse(root, 1);
        }
    
        /**
         * 后序遍历
         */
        public void postOrderTraverse() {
            System.out.println("后根序遍历:");
            traverse(root, 2);
        }
    
    }
    

    赫夫曼树

    赫夫曼(Huffman)树,又称最优树,是一类带权路径长度最短的树。
    结点的带权路径长度为从该结点到树根之间的路径长度与结点上权的乘积;
    树的带权路径长度为树中所有叶子结点的带权路径长度之和;

  • 相关阅读:
    python常用运维脚本实例
    数据库优化方案整理
    Python第一章概述与环境安装
    九阴真经
    常用的kubectl命令
    第7篇管理存储资源
    第8篇NFS PersistentVolume
    第10篇用 ConfigMap 管理配置
    第11篇Kubernetes部署微服务电商平台
    第12篇Kubernetes 监控
  • 原文地址:https://www.cnblogs.com/optor/p/8521169.html
Copyright © 2011-2022 走看看