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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年04月23日 15时12分40秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
说说如何使用 Android 的本地广播
2019-04-26
说说在 Android 中如何实现强制下线功能
2019-04-26
说说 jBPM 流程定义语言(8)—— sub-process(子流程活动)
2019-04-26
说说 MD5 加密后的类型(16位与 32位的区别)
2019-04-26
SWIFT入门 Dictionary
2019-04-26
生死6小时!!!!!!!!!!!!!!!!1
2019-04-26
段永平大佬!
2019-04-26
mysql-connector-java与Mysql、Java的对应版本
2019-04-26
移动2020面试题:斗地主
2019-04-26
MySQL 表锁、行锁、间隙锁、页锁介绍分析
2019-04-26
codeforces 789A(数学)
2019-04-26
Codeforces 796A
2019-04-26
dp46上 HDU2084
2019-04-26
dp46上 HDU1421
2019-04-26
UESTC 1324线段树
2019-04-26
POJ1651 区间dp
2019-04-26
spfa、Dijkstra、Floyd算法最短路算法详解
2019-04-26
HDU4725(spfa+双端队列优化)
2019-04-26
PowerOj 2392(树状数组 or CDQ分治)
2019-04-26