数据结构与算法(4)树

树的基本概念:

1、结点的度

结点的度是子结点的个数。例如:结点1有三个字结点2,3,4,所以结点1的度为3。

2、树的度

树的度等于所有结点度中度最高的值。例如:上图中结点度最高为3,所以树的度为3。

3、叶子结点

叶子结点是度为0的结点即没有子结点的结点。例如:上图中3,5,6,7,9,10。

4、分支结点

分支结点是除了叶子结点,树中的其他所有结点。例如:上面树的分支结点为1,2,4,8。

5、内部结点

内部结点是除了根结点以及叶子结点或在分支结点的基础之上在去掉根结点。例如:上面树的内部结点为2,4,8。

6、父结点、子结点、兄弟结点

父节点、子结点和兄弟结点是相对而言的。例如:结点1是结点2,3,4的父节点,结点2,3,4也是结点1的子结点,结点2,3,4又是兄弟结点。

7、层次

图中我们已经表出来了,根为第一层,根的孩子为第二层,依此类推,若某结点在第i层,则其孩子结点在第i+1层。

树的遍历

1、前序遍历

基本思想:前序遍历就是先访问根结点,再访问叶子结点。

图中树的前序遍历为:1,2,5,6,7,3,4,8,9,10。

2、后序遍历

  基本思想:本后序遍历就是先访问子结点,再访问根结点。

图中树的后序遍历为:5,6,7,2,3,9,10,8,4,1。

3、层次遍历

基本思想:从第一层开始,依此遍历每层,直到结束。

图中树的层次遍历为:1,2,3,4,5,6,7,8,9,10。

二叉树

一般二叉树性质:

  在非空二叉树的k层上,至多有2k个节点(k>=0)

  高度为k的二叉树中,最多有2k+1-1个节点(k>=0)

  对于任何一棵非空的二叉树,如果叶节点个数为n0,度数为2的节点个数为n2,则有: n0 = n2 + 1

完全二叉树性质:

  具有n个节点的完全二叉树的高度k为[log2n]

  对于具有n个节点的完全二叉树,如果按照从上(根节点)到下(叶节点)和从左到右的顺序对二叉树中的所有节点从0开始到n-1进行编号,则对于任意的下标为k的节点,有:

完全二叉树性质:

  • 如果k=0,则它是根节点,它没有父节点;如果k>0,则它的父节点的下标为[(i-1)/2];
  • 如果2k+1 <= n-1,则下标为k的节点的左子结点的下标为2k+1;否则,下标为k的节点没有左子结点.
  • 如果2k+2 <= n-1,则下标为k的节点的右子节点的下标为2k+2;否则,下标为k的节点没有右子节点

满二叉树性质:

在满二叉树中,叶节点的个数比分支节点的个数多1

二叉树遍历

1、前序遍历(与树的前序遍历一样)

基本思想:先访问根结点,再先序遍历左子树,最后再先序遍历右子树即根—左—右。

图中前序遍历结果是:1,2,4,5,7,8,3,6。

2、中序遍历

基本思想:先中序遍历左子树,然后再访问根结点,最后再中序遍历右子树即左—根—右。

图中中序遍历结果是:4,2,7,8,5,1,3,6。

3、后序遍历

基本思想:先后序遍历左子树,然后再后序遍历右子树,最后再访问根结点即左—右—根。

图中后序遍历结果是:4,8,7,5,2,6,3,1。

4、层次遍历(与树的层次遍历一样)

树与二叉树区别

  1、树可以有多个子结点,二叉树最多只能两个结点。

  2、树中的子结点是无序的,二叉树是分左子结点和右子结点。

  3、二叉树不是特殊树,而是独立的数据结构。

时间: 2024-10-29 16:31:12

数据结构与算法(4)树的相关文章

python数据结构与算法 36 树的基本概念

树 学习目标 理解什么是树及使用方法 学会使用树实现映射 用列表实现树 用类和引用实现树 用递归实现树 用堆实现优先队列 树的例子 前面我们学习过栈和队列这类线性数据结构,并且体验过递归,现在我们学习另一种通用数据结构,叫做树.树在计算机科学中应用广泛,象操作系统.图形学.数据库系统.网络等都要用到树.树和他们在自然界中的表哥--植物树--非常相似,树也有根,有分枝,有叶子.不同之处是,数据结构的树,根在顶上,而叶子在底部. 在开始学习之前,我们来研究几个普通的例子.第一个是生物学上的分级树.图

python数据结构与算法 37 树的实现

树的实现 记住上一节树的定义,在定义的基础上,我们用以下的函数创建并操作二叉树: BinaryTree() 创建一个二叉树实例 getLeftChild() 返回节点的左孩子 getRightChild() 返回节点的右孩子 setRootVal(val) 把val变量值赋给当前节点 getRootVal() 返回当前节点对象. insertLeft(val) 创建一个新二叉树作为当前节点的左孩子 insertRight(val) 创建一个新二叉树作为当前节点的右孩子. 实现树的关键点是合适的存

java数据结构与算法之树基本概念及二叉树(BinaryTree)的设计与实现

[版权申明]未经博主同意,不允许转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/53727333 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制) java数据结构与算法之栈(Stack)设

python数据结构与算法 39 树的遍历

树的遍历 在学习完成树的基本结构以后,我们开始研究一些树的应用模式.访问树的全部节点,一般有三种模式,这些模式的不同之处,仅在于访问节点的顺序不同.我们把这种对节点的访问称为"遍历",这三种遍历模式叫做前序.中序和后序.下面我们对遍历模式作更仔细的定义,同时研究使用这延续模式的例子. 前序遍历 在前序遍历中,先访问根节点,然后用递归方式前序遍历它的左子树,最后递归方式前序遍历右子树. 中序遍历 在中序遍历中,先递归中序遍历左子树,然后访问根节点,最后递归中序遍历右子树. 后序遍历 在后

数据结构与算法之树

树 树的表示方式有 树形图表示法:逻辑结构描述直观 嵌套集合表示法(文氏图表示法) 凹入表示法 广义表表示法 二叉树 二叉树是另一种重要的树形结构,是度为2的有序树,它的特点是每个结点至多有两棵子树. 二叉树的递归定义 二叉树是n(n≥0)个结点的有限集.它或者是空集(n=0),或者同时满足以下两个条件: (1) 有且仅有一个根结点: (2) 其余的结点分成两棵互不相交的左子树和右子树. 二叉树的特点 如果二叉树的根结点只有一棵子树,必须明确区分它是左子树还是右子树,因为两者将构成不同形态的二叉

数据结构与算法——前缀树和贪心算法(1)

介绍前缀树 何为前缀树?如何生成前缀树? 例子:一个字符串类型的数组arrl,另一个字符串类型的数组arr2.arr2中有哪些字符,是arr 1中 出现的?请打印.arr2中有哪些字符,是作为arr 1中某个字符串前缀出现的?请打印.arr2 中有哪些字符,是作为arr1中某个字符串前缀出现的?请打印arr2中出现次数最大的前缀. public class TrieTree { public static class TrieNode { public int path; public int

[数据结构与算法] : AVL树

头文件 1 typedef int ElementType; 2 3 #ifndef _AVLTREE_H_ 4 #define _AVLTREE_H_ 5 6 struct AvlNode; 7 typedef struct AvlNode *Position; 8 typedef struct AvlNode *AvlTree; 9 10 AvlTree MakeEmpty(AvlTree T); 11 Position Find(ElementType X, AvlTree T); 12

python数据结构与算法——字典树

1 class TrieTree(): 2 def __init__(self): 3 self.root = {} 4 5 def addNode(self,str): 6 # 树中每个结点(除根节点),包含到该结点的单词数,以及该结点后面出现字母的键 7 nowdict = self.root 8 for i in range(len(str)): 9 if str[i] not in nowdict: # 发现新的组合方式 10 nowdict[str[i]] = {'count':0,'

数据结构与算法——前缀树和贪心算法(2)

数的划分 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的.1,1,5; 1,5,1; 5,1,1; 问有多少种不同的分法. 输入:n,k ( 6 < n ≤ 200,2 ≤ k ≤ 6 ) 输出:一个整数,即不同的分法. 示例1 输入 //两个整数 n,k ( 6 < n ≤ 200, 2 ≤ k ≤ 6 ) 7 3 输出 //1个整数,即不同的分法. 4 C++ 法一:记忆化搜索 方法为减而治之,把n划分成k份的答案就相当

java数据结构与算法之平衡二叉树(AVL树)的设计与实现

[版权申明]未经博主同意,不允许转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/53892797 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制) java数据结构与算法之栈(Stack)设