数据结构与算法--树(tree)结构
树
二叉树
- 遍历原则:前序遍历是根左右, 中序遍历是左根右,后序遍历是左右根。
二叉搜索树
- 特点:对于树中的每个节点X,它的左子树中所有节点的值都小于X,右子树中所有节点的值都大于X。
- 遍历:采取
二叉链表
作 为二叉搜索树的存储结构。中序遍历
可以得到一个有序序列。插入
时,不必移动其他节点,只需改动某个节点的指针,由空变为非空即可。搜索、插入、删除的复杂度等于树高,即O(log(N))
- 查找优势:查询最小节点,只需一直向左找到终止节点即可;查找最大,向右找到终止节点。
平衡二叉树
- 特点:它是一颗空树或者它的左右两个子树的高度差的绝对值不超过1。左右子树都是一颗平衡二叉树。
判断树相等
两个树相等,当且仅当RootA->data == RootB->data
,而且左右子树对应相等或者互换后相等
int CompTree(TreeNode *tree1, TreeNode *tree2)
{
bool isTree1Null = (tree1 == NULL);
bool isTree2Null = (tree2 == NULL);
// 其中一个为NULL,而另一个不为NULL,肯定不相等
if (isTree1Null != isTree2Null)
return 0;
// 两个都为NULL,一定相等
if (isTree1Null && isTree2Null)
return 1;
// 两个都不为NULL,如果data不等,一定不等
if(tree1->data != tree2->data)
return 0;
//递归
return (CompTree(tree1->left, tree2->left) & CompTree(tree1->right & tree2->right)) |
(CompTree(tree1->left, tree2->right) & CompTree(tree1->right, tree2->left))
}
Trie树
又称单词查找树、字典树,是一种哈希树
的变种,是一种用于快速检索的多叉树结构。典型应用于统计和排序大量的字符串,所以经常被搜索引擎系统用于文本词频统计。
- 优点:最大限度的减少无谓的字符串比较,
查询效率比哈希表高
。 - 思想:空间换时间,利用字符串比较的公共前缀来降低查询时间的开销,以提高效率的目的。
四叉树
一个包含n
个节点的四叉树,每一个节点都有4个指向孩子节点的指针,这个四叉树有多少个空指针?
解析:n
个节点有n-1
非空指针,其余皆为空指针。4*n-(n-1)=3*n+1
红黑树
红黑树与AVL的比较?
- AVL是严格平衡树,因此在增加或删除节点时,根据不同的情况,旋转的次数要比红黑树多
- 红黑是用非严格的平衡换区增删节点时候的旋转次数的降低
- 如果搜索次数远大于插入和删除,那么选择AVL;如果搜索、插入、删除次数几乎差不多,应该选择RB
红黑树的性质:
- 节点时红色或者黑色的
- 根节点是红色的
- Nil节点是黑色的
- 每个红节点的左子节点和右子节点必定是黑色的
- Nil节点在任意位置黑神东都相等
数据结构与算法--树(tree)结构的更多相关文章
- 【算法】273-每周一练 之 数据结构与算法(Tree)
这是第六周的练习题,最近加班比较多. 下面是之前分享的链接: [算法]200-每周一练 之 数据结构与算法(Stack) [算法]213-每周一练 之 数据结构与算法(LinkedList) [算法] ...
- 每周一练 之 数据结构与算法(Tree)
这是第六周的练习题,最近加班比较多,上周主要完成一篇 GraphQL入门教程 ,有兴趣的小伙伴可以看下哈. 下面是之前分享的链接: 1.每周一练 之 数据结构与算法(Stack) 2.每周一练 之 数 ...
- 数据结构31:树(Tree)详解
复制广义表数据结构中的树 树是数据结构中比较重要也是比较难理解的一类存储结构.本章主要主要围绕二叉树,对树的存储以及遍历做详细的介绍,同时还会涉及到有关树的实际应用,例如构建哈弗曼编码等. 由于树存储 ...
- 数据结构与算法->树->2-3-4树的查找,添加,删除(Java)
代码: 兵马未动,粮草先行 作者: 传说中的汽水枪 如有错误,请留言指正,欢迎一起探讨. 转载请注明出处. 目录 一. 2-3-4树的定义 二. 2-3-4树数据结构定义 三. 2-3-4树的可以得到 ...
- 数据结构与算法---树结构(Tree structure)
为什么需要树这种数据结构 数组存储方式的分析 优点:通过下标方式访问元素,速度快.对于有序数组,还可使用二分查找提高检索速度. 缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低 ...
- java 数据结构与算法---树
一.树的概念 除根节点外,其余节点有且只有一个父节点. 1.度 节点的度:每个节点的子节点个数. 树的度:树内各个节点的度的最大值. 树的高度(深度):树中节点的最大层次称为树的深度. 节点路径:一 ...
- JavaScript 数据结构与算法之美 - 非线性表中的树、堆是干嘛用的 ?其数据结构是怎样的 ?
1. 前言 想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手. 非线性表(树.堆),可以说是前端程序员的内功,要知其然,知其所以然. 笔者写的 JavaScript 数据结构与算法 ...
- [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法
二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...
- PHP算法 《树形结构》 之 伸展树(1) - 基本概念
伸展树的介绍 1.出处:http://dongxicheng.org/structure/splay-tree/ A. 概述 二叉查找树(Binary Search Tree,也叫二叉排序树,即Bin ...
随机推荐
- 牛客网剑指offer【Python实现】——part2
不用加减乘除做加法 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 两个数异或:相当于每一位相加,而不考虑进位: 两个数相与,并左移一位:相当于求得进位: 将上述两步的 ...
- 听说用 Lombok 可以早点下班?
听说隔壁用 Lombok 的六点就下班了,我也想六点下班! 好的,那么这篇文章就介绍下什么是 Lombok,Lombok 做了什么以及 Lombok 是怎么做的? 在介绍之前,先通过是否使用 Lomb ...
- DNN训练技巧(Tips for Training DNN)
本博客是针对李宏毅教授在Youtube上上传的课程视频<ML Lecture 9-1:Tips for Training DNN>的学习笔记. 课程链接 Recipe of Deep Le ...
- 使用PyTorch进行迁移学习
概述 迁移学习可以改变你建立机器学习和深度学习模型的方式 了解如何使用PyTorch进行迁移学习,以及如何将其与使用预训练的模型联系起来 我们将使用真实世界的数据集,并比较使用卷积神经网络(CNNs) ...
- SpringBoot安装与配置
1.环境准备 1.1.Maven安装配置 Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件. 下载Maven可执行文件 cd /usr/local ...
- spring boot 源码赏析之事件监听
使用spring Boot已经快1年多了,期间一直想点开springboot源码查看,但由于种种原因一直未能如愿(主要是人类的惰性...),今天就拿springboot 的监听事件祭刀. spring ...
- Dubbo与Spring Cloud的比较
区别: ----- 来源(背景): Dubbo,是阿里巴巴服务化治理的核心框架,并被广泛应用于阿里巴巴集团的各成员站点. Spring Cloud,从命名我们就可以知道,它是Spring Source ...
- centos7 编译安装mysql5.7
mysql源码可以到官网下载 安装依赖包 yum -y install gcc gcc-c++ ncurses ncurses-devel bison libgcrypt perl make cmak ...
- App 性能测试分享
在本文内,主要以Android性能测试为主进行分析 一.性能测试包含 1.启动时间测试 测试场景包括 - - - 首次安装启动时间.冷启动.热启动测试 2.页面响应时间: 用户从点击一个控件, ...
- P1627 [CQOI2009]中位数 题解
CSDN同步 原题链接 简要题意: 给定一个 \(1\) ~ \(n\) 的排列,求以 \(b\) 为中位数的 连续子序列且长度为奇数 的个数. 显然这段序列包含 \(b\). 中位数的定义:排序后在 ...