一种层次数据结构:很多时候在管理上比线性表更为高效。

1.树的定义:由有限个节点以树的连接方式的集合:有一个唯一的根节点,若干个子树,其中每一个子树也有唯一的根节点,这个根节点下又分为若干的子树的递归定义

2. 有关树的基本术语:

节点的度  树的度 根节点 叶节点 分支节点 父节点 子节点 兄弟节点 子孙节点 祖先节点 节点的层次(根节点层次是1) 路径  路径长度 树的深度

3. 二叉树的定义:由根节点和左右子树构成,左右子树分别又是一个二叉树的递归定义

4.完美二叉树(满二叉树):

定义一(国外):一个二叉树中除了叶节点;其余节点的度数均为2

定义二(国内):在定义一的基础上,最后一层都布满了叶子节点,称为满二叉树

5. 完全二叉树:在满二叉树的基础上,可以连续删除掉最末尾几个元素

完全二叉树

6. 二叉树的重要性质

① 二叉树的第i(i=1,2,3...)层最多有2^(i-1)个节点; 一个k层的二叉树的总节点不多于 2^(k)-1个。

② n0=n2+1 :度数为0的节点是度数为2的节点的数量+1

7.二叉树的两种实现方式

1.利用 [ ] 来实现

''' 本模块不是封闭的模块;所以不可以被别的模块调用
这里提供几个本模块的接口'''
# 二叉树实例,作为输入btree = ['A', ['B', None, None],['C', ['D', ['F', None, None],['G', None, None]]]]
#####################def bintree(data, left=None, right=None): # 为了操作二叉树定义递归的基本框架return [data, left, right]def is_empty(btree):return btree is Nonedef root(tree):return tree[0]def left(tree):return tree[1]def right(tree):return tree[2]def set_root(tree, data):tree[0] = datadef set_left(tree, left):tree[1] = leftdef set_right(tree, right):tree[2] = right
##########################
# 这里是实例操作的示例:# 1 判断二叉树是否空:
ans=is_empty(btree)
print("这个二叉树是否空",ans)# 2 找到这个二叉树的根
ans = root(btree)
print("这个二叉树的根是", ans)# 3 把这个二叉树的右子树设置成为别的子树
print("设置了右子树之前", btree)set_right(btree, bintree(100, bintree(200), 300))print("设置了右子树之后", btree)

2. 以连接节点为基础构成的二叉树

'''基于链表节点的二叉树类实现
注意:这里的节点是封闭的但是,相关树的操作不是
封闭的
该模块提供的接口有:
1. 查看树的节点个数2.如果全部节点内容是数值,可以求所有节点数值的和'''
# 节点类class BinTree:def __init__(self, data, left=None, right=None):self.data = dataself.left = leftself.right = right# 操作函数
def count_Note(btree):if btree == None:return 0else:  # 递归求解return 1 + count_Note(btree.left)\+ count_Note(btree.right)def sum_Note(btree):if btree==None:return 0else:return btree.data+sum_Note(btree.left)\+sum_Note(btree.right)############################
# 操作示例
# 这里一定要注意的是:最小单元不可以是单个数字
#btree=BinTree(1,BinTree(2,3),BinTree(5,BinTree(6,9)))btree=BinTree(1, BinTree(2, BinTree(3)), BinTree(5, BinTree(6, BinTree(9))))print("节点的个数是:%d"%count_Note(btree))print("节点的内容和是:%d"%sum_Note(btree))

树的定义/性质/实现相关推荐

  1. (王道408考研数据结构)第五章树-第一节:树的定义、基本用语和常考性质

    文章目录 一:树基本概念 (1)树的定义 (2)结点分类 (3)结点关系(相关术语) 二:树的常考性质 一:树基本概念 (1)树的定义 树(Tree):这是一种非线性结构.是 n n n(

  2. 从AVL树的定义出发,一步步推导出旋转的方案。

    本文从AVL树的定义出发,一步步地推导出AVL树旋转的方案,这个推导是在已经清楚地知道AVL树的定义这个前提下进行的.文章注重思考的过程,并不会直接给出AVL树是怎样旋转的,用来提醒自己以后在学习的时 ...

  3. 二叉树第i层中的所有结点_讲透学烂二叉树(二):图中树的定义amp;各类型树的特征分析...

    日常中我们见到的二叉树应用有,Java集合中的TreeSet和TreeMap,C++ STL中的set.map,以及Linux虚拟内存的管理,以及B-Tree,B+-Tree在文件系统,都是通过红黑树 ...

  4. 数据结构学习记录——哈夫曼树(什么是哈夫曼树、哈夫曼树的定义、哈夫曼树的构造、哈夫曼树的特点、哈夫曼编码)

    目录 什么是哈夫曼树 哈夫曼树的定义 哈夫曼树的构造 图解操作 代码实现 代码解析 哈夫曼树的特点 哈夫曼编码 不等长编码 二叉树用于编码 哈夫曼编码实例 什么是哈夫曼树 我们先举个例子: 要将百分制 ...

  5. 数据结构(十八)树的定义与存储结构

    一.树的定义 1.树(Tree)是n(n>=0)个结点的有限集.n=0时称为空树.在任意一棵非空树中:(1)有且仅有一个特定的称为根(Root)的结点:(2)当n>1时,其余结点可分为m( ...

  6. 数据结构之树的定义及操作

    树的定义 树是一种非线性的数据结构 树是由 n ( n ≥0 ) 个结点组成的有限集合 如果 n = 0,称为空树(如下图a): 如果 n > 0,则: 1.有一个特定的称之为根(root)的结 ...

  7. 数据结构笔记(十八)-- 树的定义和基本术语

    树的定义和基本术语 一.树 二.树的分类 森林:.n个互不相交的树的集合 一般树:任意一个节点的子节点的个数都不受限制 一般二叉树:任意一个节点的子节点的个数都是2个,且这2个子节点的位置不可以更改 ...

  8. 2023牛客寒假算法基础集训营4_20230130「向上取整」「夹逼dp」「lowbit科学+树状数组性质」「搜索」「倍增跳表」「莫队」

    6/13 教育场是有被教育到.(预计会鸽几题. 已过非太水的题们 //B //https://ac.nowcoder.com/acm/contest/46812/B//小构造小数学#include & ...

  9. 二叉树的定义 性质 及存储结构

    二叉树的定义和基本术语 二叉树是n个数据元素的有限集,它或为空集(n=0),或者含有唯一的称为根的元素,且其余元素分别分成两个互不相交的子集,每个子集自身也是一颗二叉树,分别称为根的左子树和右子树.集 ...

最新文章

  1. [转]线程安全java
  2. opc ua_UA Web挑战会议:针对初创公司的SpringIO
  3. [c/c++] programming之路(28)、结构体存储和内存对齐+枚举类型+typedef+深拷贝和浅拷贝...
  4. boost::interprocess::offset_ptr用法的测试程序
  5. 算法训练营07-递归使用练习
  6. 初学JavaWeb需要的前端js,JavaScript是什么样的?
  7. ca证书 csr_linux下使用openssl生成 csr crt CA证书
  8. 被问到有没有内核开发经验_一个人就是一个开发团队!成电硬核毕业生自制迷你电脑走红!...
  9. mysql主从复制实践之单数据库多实例
  10. ffmpeg 无法找到libpostproc的问题
  11. 学习SQL:将SQL Server导出到Excel
  12. 工厂方法(Factory Pattern)
  13. springboot+vue全栈开发_springboot+vue(一)___开发环境以及前后端项目搭建
  14. cryptojs des php,前端CryptoJS AES/DES加解密与后端PHP AES/DES加解密
  15. 安全攻防六:SQL注入,明明设置了强密码,为什么还会被别人登录
  16. 电脑端图纸设计辅助工具-AutoCAD提供下载
  17. android表格布局占满整行,Android布局之表格布局TableLayout详解
  18. Nitrux安装JDK-10(Linux通用)教程
  19. 信息学奥赛一本通:1084:幂的末尾
  20. Scrapy Tutorial

热门文章

  1. python elseif用法_Python关键字简介
  2. java 弹性碰撞_球体弹性碰撞位置和速度计算算法
  3. linux php mysqldump,Linux Shell脚本之利用mysqldump备份MySQL数据库(详细注解)
  4. 计算机系统应用系统,计算机系统应用.pdf
  5. 什么是网络计算机有什么优点,ISDN是什么?它有什么优点?
  6. python做数据分析需要oracle_精通 Oracle+Python,第 1 部分:查询最佳应践
  7. python单链表实现具体例子_python中单链表的实现
  8. 闪屏页新手引导页面主页判断跳转的逻辑
  9. java虚拟机回收机制原理
  10. 基于JAVA+SpringMVC+Mybatis+MYSQL的员工事物管理系统