首页 > 编程语言 >python数据结构(树和二叉树)

python数据结构(树和二叉树)

时间:2024-07-05 14:55:35浏览次数:12  
标签:结点 层次 python 孩子 双亲 二叉树 数据结构 root

非线性结构 一对多

根结点(无前驱)

多个叶子结点(无后继)

其他数据元素(一个前驱,多个后驱)

树与二叉树转换

树与二叉树均可用二叉链表作为存储结构,则以二叉链表为媒介可导出树之间的一个对应关系-----即给定一颗树,可以找到唯一一颗二叉树与之对应。

把树转化为二叉树

步骤一:加线。在各亲兄弟之间加一虚线

步骤二:抹线。抹掉(除第一个孩子外)该结点到其余孩子之间的连线。

步骤三:旋转。新加上去的虚线改实线且向右斜,原有的连线均向左斜,使之结构层次分明。

把二叉树转化为树

前提条件:二叉树的根节点无左右孩子。

步骤一:加线。若某节点i是双亲节点的左孩子,则将该结点的右孩子以及当且仅当连续地沿着此右孩子的右链不断搜索到的所有右孩子都分别与结点i的双亲用虚线连起来。

步骤二:抹线。抹掉原二叉树中所有双亲结点与右孩子的连线。

步骤三:归整化。将图形归整化,使各结点按层次排列且将加上去的虚线变成实线。

树的概览

结点的度:分支的个数

树和度:树中所有结点的度的最大值

叶子结点:度为零的结点

分支结点:度大于零的结点

孩子结点:结点子树的根称为该结点的双孩子

双亲结点:孩子结点的上层结点叫该结点的双亲 (父节点)

兄弟结点:同一双亲的孩子

结点的层次:根结点的层次为1,第i层的结点的子树的根结点的层次为i+1

树的深度:树中叶子结点所在的最大层次。

二叉树

二叉树或为空树,或是由一个根结点加上两棵分别称为左子树和右子树的、互不交的二叉树组成。

并且二叉树中不存在度大于2的结点,并且二叉树的子树有左子树和右子树之分!

二叉树创建

def createBiTree(self,root):
    data=input()
    if data is "#":
      return None
    else:
      root.data=data
      root.lchild=self.createBiTree(root.lchild)   #一个一个结点放上去
      root.rchild=self.createBiTree(root.rchild)
    return root

具有四种基本形态

空树、只有左子树、只有右子树、同时有左右子树

满二叉树

深度为k且含有(2的k次方减一)个结点的二叉树。

特点:

每一层上都含有最大结点数。

结点编号:从上到下,从左到右按自然数编号。

完全二叉树

深度为k的二叉树中所含的n个结点和深度为k的满二叉树中编号为1至n的结点一一对应。

特点:

1.除最后一层外,每一层都取最大结点数,最后一层结点都集中且连续分布在该层最左边的若干位置。

2.叶子结点只可能在层次最大的两层出现。

3.对任一结点,若其右分支下的子孙的最大层次为L,则其左分支下的子孙的最大层次为L或L+1。

注意:满二叉树必为完全二叉树,而完全二叉树不一定是满二叉树!

标签:结点,层次,python,孩子,双亲,二叉树,数据结构,root
From: https://blog.csdn.net/2301_79070867/article/details/140208631

相关文章

  • Box,一个字典操作python库
     Box介绍Box是一个让字典操作变得异常简单与直观,支持通过属性访问字典内容的库。 特点概述属性访问Box允许用户像访问对象属性一样访问字典的值,提升了代码的可读性和易用性。无缝嵌套自动将嵌套的字典转换为Box对象,使得处理复杂字典结构变得轻而易举。灵活性......
  • Python速通(条件语句)
    (牛牛的选择)牛牛在牛客网经过了两次笔试分别获得了Tencent和Alibaba的面试资格,不巧的是这两次面试的时间冲突了。两家公司牛牛都想去,他决定通过笔试的成绩判断去参加哪家公司的面试。现在输入两行浮点数,分别表示牛牛在Tencent和Alibaba的笔试成绩,请比较两个成绩,输出笔试成绩较高的......
  • 小白也能看懂的Python基础教程(9)
    目录Python文件操作1、文件操作概述什么是文件?文件操作包含哪些内容呢?文件操作的作用2、文件的基本操作open()打开函数mode访问模式详解读操作相关方法read()方法:readlines()方法:readline()方法:file读取文件之readfile读取文件之readlines和reanline相对和绝对......
  • ipython的使用技巧整理
    IPython是一个强大的交互式Python环境,提供了许多高级功能和快捷键,以下是非常详细的IPython使用技巧整理,覆盖了每个知识点(但本文是基于有一定基础的同学看的):IPython的使用基础:一、安装与基本操作安装Anaconda建议直接下载安装Anaconda,其中包含丰富的库,以及我们需要使用......
  • Redis数据结构-字典的实现
    字典,又称符号表(symboltable)、关联数组(associativearray)或者映射(map),是一种用于保存键值对(key-valuepair)的抽象数据结构。在字典中,一个键(key)可以和一个值(value)进行关联(或者说将键映射为值),这些关联的键和值就被称为键值对。字典中的每个键都是独一无二的,程序可以在字典......
  • 代码随想录算法训练营第十四天| 226.翻转二叉树 、101. 对称二叉树、104.二叉树的最大
    二叉树学习2226题翻转二叉树,改一下前序递归遍历,每次遍历的时候都调换一下左右结点即可。classSolution{public:voidpreorder(TreeNode*root){if(root==nullptr){return;}TreeNode*tmp;tmp=root->left;......
  • python爬取的数据存放在哪
    大家好,本文将围绕python数据爬取有哪些库和框架展开说明,python爬取数据保存到数据库是一个很多人都想弄明白的事情,想搞清楚python爬取数据存入数据库需要先了解以下几个事情。经常游弋在互联网爬虫行业的程序员来说,如何快速的实现程序自动化,高效化都是自身技术的一种沉淀的......
  • python作业题百度网盘,python大作业总结
    大家好,小编来为大家解答以下问题,python作业题百度网盘,python大作业总结,现在让我们一起来看看吧!大家好,本文将围绕python大作业代码及文档展开说明,python大作业代码100行是一个很多人都想弄明白的事情,想搞清楚python期末大作业题目需要先了解以下几个事情。大家好,给大家分......
  • python学习之字符串
    (一)表示方式:一对单影号或一对双影号:常用于单行字符串一对三影号(可双可单):常用于多行字符串,不用于给变量赋值时可作多行注释用字符串不可变,不能像列表一样修改其中某个元素,任何对是字符串的修改实际就是生成了一份新数据。(二)转义符\反斜杠(也是windows中路径分隔符,unix中路径分......
  • python学习之字符编码
    字符分类及历史ASCII0-255从数字到小写大写英文字母,加上一些特殊符号,常用的低字节(0-127)也是基本表,非常用的高字节(128-255)也是扩展表,8位为1字节,ASCII中每一个字符占一个字节GB2312中国1980年,为中文在计算机应用而制定的编码系统,一个字符占两个字节,中英文环境下兼容ASCII码,以连......