博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构(python) —— 【09: 树与二叉树】
阅读量:3940 次
发布时间:2019-05-24

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

树与二叉树

1. 啥是树?

树是一种可以递归定义的数据结构

树是由n个节点组成的集合:

  1. 如果n=0,那这是一颗空树
  2. 如果n>0,那存在一个节点作为树的根结点,其他节点可以分为m个节点,每个集合本身又是一棵树

树

2. 基本概念

  1. 根结点: 根结点就是最开始的那个点,如上图根结点即A
  2. 叶结点: 下面没有分叉的节点,如上图叶结点为L\M\N\O\P
  3. 树的深度(高度): 最深有几层,如上图最深有4层(A-B-F-L、A-C-H-M…)
  4. 节点的度: 每个节点分出的叉,如上图,A节点的度为4,B节点的度为2,H节点的度为3
  5. 树的度: 整个树里最大节点的叉(即叉最多的节点的叉的数量),如上图,节点A的分叉最多,有4个,故树的度为4
  6. 孩子节点/父节点: F是L的父亲节点,L是F的孩子节点;H是M\N\O的父亲节点,M\N\O是H的孩子节点…
  7. 子树: C-H-M-N-O是一棵子树;K-P也是一棵子树…

3. 二叉树

<1> 二叉树: 度不超过2的树,每个节点最多有两个孩子节点,两个孩子节点被区分为左孩子节点和右孩子节点

二叉树<2> 满二叉树: 一个二叉树,如果每一个层的节点数都达到最大值,则这个二叉树就是满二叉树
满二叉树<3> 完全二叉树:叶结点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边若干位置的二叉树
完全二叉树

4. 二叉树的存储方式(表示方式)

二叉有两种储存方法: 链式存储方式、顺序存储方式,链式储存方法后面会讲,今天先来讲讲顺序储存方法。

以这棵完全二叉树为例:
完全二叉树那现在问题来了,我知道一个节点,要怎么去找该节点的父节点和子节点呢?
首先,先按层级关系将节点储存在列表中: [A, B, C, D, E, F, G, H, I, J, K],索引或者说下标分别为[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
列表储存比如现在我们知道节点E,要去找出它的父节点和子节点:
E的下标为4E的父节点B的下标为1E左孩子J的下标为9F右孩子K的下标为10
这里就直接给出规律了(i是父亲节点的下标):
父亲节点和左孩子节点的编号下标的关系: i——>2i+1
父亲节点和右孩子节点的编号下标的关系: i——>2i+2
子节点找父节点: (i-1)//2           i是子节点下标     //为整除

转载地址:http://qfiwi.baihongyu.com/

你可能感兴趣的文章
Lesson 4 Part 2 Softmax Regression
查看>>
文章中运用到的数学公式
查看>>
Projective Dynamics: Fusing Constraint Projections for Fast Simulation
查看>>
从2D恢复出3D的数据
查看>>
glm 中 数据类型 与 原始数据(c++ 数组)之间的转换
查看>>
Derivatives of scalars, vector functions and matrices
查看>>
the jacobian matrix and the gradient matrix
查看>>
VS2010 将背景设为保护色
查看>>
ubutun里面用命令行安装软件
查看>>
ubuntu 常用命令
查看>>
SQLite Tutorial 4 : How to export SQLite file into CSV or Excel file
查看>>
Optimizate objective function in matrix
查看>>
Convert polygon faces to triangles or quadrangles
查看>>
read obj in matlab
查看>>
find out the neighbour matrix of a mesh
查看>>
Operators and special characters in matlab
查看>>
As-Conformal-As-Possible Surface Registration
查看>>
qmake Variable Reference
查看>>
Lesson 2 Gradient Desent
查看>>
find border vertex
查看>>