《数据结构与算法Python语言描述》学习笔记chap6(1)二叉树

《数据结构与算法Python语言描述》学习笔记chap6(1)二叉树

20191201

出现502的原因是:
连接超时 我们向服务器器发送请求 由于服务器当前链接太多,导致服务器方面无法给于正常的响应,产生此类报错。
解决办法:刷新

树形结构

由结点和结点之间的连接关系构成,最重要的特征包括:
1)如果一个结构不空,其中就存在着唯一的起始结点,称为树根。
2)按结构的连接关系,树根外的其余节点都且只有一个前去,但可以有多个后继。
3)结构里的所有结点都在数根节点通过后继关系可达的结点集合里。换句话说,从树根结点触发,经过若干次后继关系可以到达结构中的任一个结点。
4)节点之间不会形成循环关系,即说明,节点之间的联系形成了一种序,但一般而言不像线性表那样形成一个全序。
5)从这种结构里的任意两个不同结点出发,通过后继关系可达的两个结点结合,或者互不相交,或者一个集合是另一个集合的子集。

二叉树

二叉树是最简单的树形结构,其特点是树中每个结点至多关联到两个后继结点。
定义:
二叉树是结点的有穷集合。这个接或者是空集,或者其中有一个称为根节点的特殊结点,其余姐弟啊分属两个不相交的二叉树,这两个二叉树分别是原二叉树的左右子树。

基本概念
一个结点的子结点个数称为该结点的度。
一棵二叉树的根节点称为概述的子树 根节点的 父结点,与之对应,子树的根节点称为二叉树数根节点 的子结点
可认为从父结点到子结点有一条连线,称为父结点到子结点的边。
注意,这种边有方向,形成一种单方向的父结点/子结点关系(父子关系)。
基于父子关系可以定义其传递关系,称为祖先/子孙关系,它决定了一个结点的祖先节点或者子孙节点,
一棵二叉树的根节点是这棵树中所有其它节点的祖先节点,而这些结点都是其子孙节点。

路径、结点的层和树的高度

根据祖先节点和子孙结点的定义,从一个祖先节点到其任何子孙节点都存在一系列边,形成从前者到后者的联系。这样一系列首尾相连的边称为属中的一条路径。
路径中 边的条数 称为该路径的长度。
显然:一颗二叉树的根结点到该树种的任一结点都有路径,而且路径唯一。
二叉树是一种层次结构,将其树根看作最高层元素,如果有子结点,其子结点看作下一层元素。
规定二叉树 根的层数为0 。对应位于K层的结点,其子结点是k+1层的元素。
从树根到树种任意结点的路径长度就是该节点所在的层数,也成为该节点的层数。
一棵二叉树的高度(也称为深度)是书中结点的最大层数(也是这棵树里的最长路径的长度)

二叉树的性质:
在非空二叉树第i层之多有2的i次方个结点;
高度为h的二叉树至多有2的(h+1)次方—1个结点

满二叉树:二叉树的所有分支节点的度数都为2;
扩充二叉树:对二叉树T,加入足够多的新叶结点,使T的原有节点都变成度数为2的分支节点,得到的二叉树称为T的扩充二叉树。扩充二叉树种新增的结点称为其外部节点,原树T的结点称为其内部节点。空树的扩充二叉树规定为空树。
完全二叉树:对一颗高度为H的二叉树,从0到第h-1层的结点都满,如果下一层的结点不满,则所有结点最左边连续排列,空位都在右边,这样的二叉树是一颗完全二叉树。

遍历:
深度优先遍历:中序遍历,前序遍历,后序遍历
宽度优先遍历:

二叉树的list实现

# list 实现二叉树
def BinTree(data,left=None,right=None):
    return [data,left,right]


def is_empty_BinTree(btree):
    return btree is None


def root(btree):
    return btree[0]


def left(btree):
    return btree[1]


def right(btree):
    return btree[2]


def set_root(btree,data):
    btree[0] = data


def set_left(btree,data):
    btree[1] = data

def set_right(btree,data):
    btree[2] = data


t1 = BinTree(2,BinTree(4),BinTree(8))
print(t1)

运行结果:
[2, [4, None, None], [8, None, None]]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值