树和二叉树->基础知识
树的表示方法
1 一般表示法

2 广义表表示法

3 凹入表示法

树的基本术语:
树:n(n>=0)个结点的有限集
结点:包含一个数据元素及若干指向其子树的分支
结点的度:结点拥有的子树数成为结点的度
叶子(也叫终端结点):度为0的结点
非终端结点(也叫分支结点):度不为0的结点
树的度:树内各结点的度的最大值
孩子:结点的子树的根成为该结点的孩子
双亲:若B结点是A结点的孩子,则A结点是B结点的双亲
堂兄弟:其双亲在同一层的结点护卫堂兄弟
结点的层次:从根开始定义起,根为第一层,根的孩子为第二层
树的深度(也叫高度):树中结点的最大层次。
有序树:子树有序的树
无序树:不考虑子树的顺序
森林:m(m>=0)棵互不相交的树的集合。
二叉树定义
在二叉树中,每个结点至多只有两颗子树,并且,二叉树的子树有左右之分,其次序不能颠倒。关于树的术语也都适用于二叉树
完全二叉树定义
一颗深度为k,除第k层外,其它各层的结点数(1~k-1)的结点数都达到最大个数,第k层有叶子结点,且叶子结点从左至右依次排布,这就是完全二叉树。
满二叉树定义
一颗深度为k且有2k-1个结点的二叉树成为满二叉树
二叉树性质
性质1 在二叉树的第i层上至多有2i-1个结点
性质2 深度为k的二叉树至多有2k-1个结点, 用等比数列求和公式就可容易证明
性质3 对任何一颗二叉树T,终端结点数n0和度为2的结点数n2的关系如下:
n0=n2+1,在博客“内部排序->选择排序->树形选择排序”的附录1已经证明过。
性质4 具有n个结点的完全二叉树的深度为[log2n]+1
证明:假设深度为k, 根据性质2和完全二叉树的定义有
2k-1 < n <= 2k-1
性质5 对一颗有n个结点的完全二叉树,按层序编号,则对任一结点,都有:
(1) 根结点除外的其它结点i的双亲为[i/2]
(2) 结点i的左孩子结点为2*i,(2*i不超过树的结点个数的情况下)
(3) 结点i的右孩子结点为2*i+1, (2*i+1不超过树的结点个数的情况下)
树和二叉树->基础知识的更多相关文章
- 【VB6】使用VB6创建和访问Dom树【爬虫基础知识 】
使用VB6创建和访问Dom树 关键字:VB,DOM,HTML,爬虫,IHTMLDocument 我们知道,在VB中一般大家会用WebBrowser来获取和操作dom对象. 但是,有这样一种情形,却让我 ...
- Linux dts 设备树详解(一) 基础知识
Linux dts 设备树详解(一) 基础知识 Linux dts 设备树详解(二) 动手编写设备树dts 文章目录 1 前言 2 概念 2.1 什么是设备树 dts(device tree)? 2. ...
- Java数据结构——树、二叉树的理论知识汇总
通用树的理论知识 一.树的定义 由一个或多个(n>=0)节点组成的有限集合T,有且仅有一个节点称为根(root),当n>1时,其7余的节点为m(m>=0)个互不相交的有限集合T1,T ...
- Python基础知识4--数据结构(树)
树 树的概念 堂兄弟的双亲不一定是兄弟关系. 二叉树 斜树 满二叉树 完全二叉树 二叉树的性质
- Python超全干货:【二叉树】基础知识大全
概念 二叉树是每个节点最多有两个子树的树结构.通常子树被称作"左子树"(left subtree)和"右子树"(right subtree) 二叉树的链式存储: ...
- 浅析C++基础知识
近期想对C++的面试题目进行一下更加详细的整理.事实上认真思考一下C++程序猿的面试,我们能够发现对程序猿的能力的考察总是万变不离当中,这些基础知识主要分为五部分:一. C/C++基础知识 二. C/ ...
- 面试基础知识集合(python、计算机网络、操作系统、数据结构、数据库等杂记)
python python _.__.__xx__之间的差别 python中range.xrange和randrange的区别 python中 =.copy.deepcopy的差别 python 继承 ...
- JAVA学习基础知识总结(原创)
(未经博主允许,禁止转载!) 一.基础知识:1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. java语言是跨平 ...
- LeetCode刷题191130 --基础知识篇 二叉搜索树
休息了两天,状态恢复了一下,补充点基础知识. 二叉搜索树 搜索树数据结构支持许多动态集合操作,包括Search,minimum,maximum,predecessor(前驱),successor(后继 ...
随机推荐
- linux每日命令(8):mv命令
mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录. 一.命令格式: mv [选项] 源文件或目 ...
- InstallShield:卸载时文字叠加,文字乱码
问题: InstallShield2010打包的程序.如果程序正在运行,卸载程序,提示关闭程序,然后消息界面出现文字叠加. 定位问题: 新建Installshield项目,依次修改SetupType, ...
- hdoj:题目分类
基础题: 1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029.1032.1037.1040.1048.1056.1058. ...
- oracle 11g 使用物化视图远程增量刷新数据
① 源数据库建立物化视图日志 drop MATERIALIZED VIEW LOG ON ORG_BASEINFO/ CREATE MATERIALIZED VIEW LOG ON ORG_BASEI ...
- ORACLE 11.2.0.4 OCR VOTING DISK 模拟恢复场景
① 备份 ocrconfig -export 文件名 或者 ocrconfig -manualbackup 或者 找到备份 ocrconfig -local -showb ...
- duilib进阶教程 -- Container控件 (3)
前面两个教程的目的是教大家与MFC结合,那么从这篇起,将不再使用MFC,而使用纯win32项目,本文的所有知识已经在<duilib入门教程>里面讲过了,因此基础知识不再赘述. 代码下载:h ...
- 两台centos之间传送文件
https://www.cnblogs.com/pangguoming/p/9282762.html
- INTERVAL
select sysdate - interval '10' day as "10天前", sysdate - interval '10' hour as " ...
- mybatis与hibernate区别与应用场景
hibernate:是一个标准化的ORM框架.入门的门槛较高,不需要程序写sql,语句就自动生成了.对sql进行优化.修改比较困难. 应用场景:适用于中小企业需求变化不多的项目,比如后台管理系统,er ...
- javascript定时器使用
使用定时器实现JavaScript的延期执行或重复执行 window对象提供了两个方法来实现定时器的效果,分别是window.setTimeout()和window.setInterval.其中前者可 ...