Hash算法和二叉树
发布日期:2022-02-06 00:26:59 浏览次数:39 分类:技术文章

本文共 3563 字,大约阅读时间需要 11 分钟。

什么是Hash算法

哈希算法可以将任意长度的二进制值映射为较短的,固定长度的二进制值。我们把这个二进制值成为哈希值。

Hash算法有什么特点

1.哈希值是二进制值;
2.哈希值具有一定的唯一性;
3. 哈希值极其紧凑;
4. 要找到生成同一个哈希值的2个不同输入,在一定时间范围内,是不可能的。

哈希算法的应用

public int hashCode(){			int offset;			int h=hashCode();			if(h==0){				int off=offset;				char val[]=value;				int len=count;									for(int i=0;i

---------------------------------分割线-----------------------------------------------------------------------------

什么是二叉树

在这里插入图片描述

如图所示:二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。

二叉树分类

满二叉树:二叉树中,所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上。

完全二叉树:在满二叉树中,从最后一个结点开始,连续去掉任意个结点,即是一棵完全二叉树。

为了详细介绍,下面用代码实现`

public class TreeNode {    // 左节点(儿子)    private TreeNode lefTreeNode;        // 右节点(儿子)    private TreeNode rightNode;        // 数据    private int value;        public TreeNode(int value) {    	this.value=value;    }	public TreeNode getLefTreeNode() {		return lefTreeNode;	}	public void setLefTreeNode(TreeNode lefTreeNode) {		this.lefTreeNode = lefTreeNode;	}	public TreeNode getRightNode() {		return rightNode;	}	public void setRightNode(TreeNode rightNode) {		this.rightNode = rightNode;	}	public int getValue() {		return value;	}	public void setValue(int value) {		this.value = value;	}    }public class TreeRoot {    private TreeNode treeRoot;    public TreeNode getTreeRoot() {        return treeRoot;    }    public void setTreeRoot(TreeNode treeRoot) {        this.treeRoot = treeRoot;    }        /**     * 先序遍历     * @param rootTreeNode  根节点     */    public static void preTraverseBTree(TreeNode rootTreeNode) {        if (rootTreeNode != null) {            //访问根节点            System.out.println(rootTreeNode.getValue());            //访问左节点            preTraverseBTree(rootTreeNode.getLefTreeNode());            //访问右节点            preTraverseBTree(rootTreeNode.getRightNode());        }    }    /**     * 中序遍历     * @param rootTreeNode  根节点     */    public static void inTraverseBTree(TreeNode rootTreeNode) {        if (rootTreeNode != null) {            //访问左节点            inTraverseBTree(rootTreeNode.getLefTreeNode());            //访问根节点            System.out.println(rootTreeNode.getValue());            //访问右节点            inTraverseBTree(rootTreeNode.getRightNode());        }    }    /**     * 动态创建二叉查找树     *     * @param treeRoot 根节点     * @param value    节点的值     */    public static void createTree(TreeRoot treeRoot, int value) {        //如果树根为空(第一次访问),将第一个值作为根节点        if (treeRoot.getTreeRoot() == null) {            TreeNode treeNode = new TreeNode(value);            treeRoot.setTreeRoot(treeNode);        } else  {            //当前树根            TreeNode tempRoot = treeRoot.getTreeRoot();            while (tempRoot != null) {                //当前值大于根值,往右边走                if (value > tempRoot.getValue()) {                    //右边没有树根,那就直接插入                    if (tempRoot.getRightNode() == null) {                        tempRoot.setRightNode(new TreeNode(value));                        return ;                    } else {                        //如果右边有树根,到右边的树根去                        tempRoot = tempRoot.getRightNode();                    }                } else {                    //左没有树根,那就直接插入                    if (tempRoot.getLefTreeNode() == null) {                        tempRoot.setLefTreeNode(new TreeNode(value));                        return;                    } else {                        //如果左有树根,到左边的树根去                        tempRoot = tempRoot.getLefTreeNode();                    }                }            }        }    }}

==二叉树的遍历:==前序遍历(根左右),中序遍历(左根右),后序遍历(左右根),层序遍历。

转载地址:https://blog.csdn.net/weixin_46175284/article/details/105440871 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Java泛型集合
下一篇:JAVA的多线程和Native的用法

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月23日 15时12分40秒