IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构-树(一) -> 正文阅读

[数据结构与算法]数据结构-树(一)

含义

树广泛用于计算机科学的多个领域,从操作系统、图形学、数据库到计算机网络。

属性:

????????层次性,按层级构建的,越笼统就越靠近顶部,越具体则越靠近底部。可以将树的某个

????????????????部分(子树)整体移到另一个位置,而不影响下面的层。

? ? ? ? 一个节点的所有子节点都与另一个节点的所有子节点无关。

? ? ? ? 叶子节点都是独一无二的。

节点:

? ? ? ? 树的基础部分。可以有自己的名字,“键”。可以带有附加信息,称作“有效荷载”。不是重

????????点,但在树的应用中很重要。

边:

? ? ? ? 树的基础部分。两个节点通过一条边相连,表示它们之间存在关系。除了根节点外,

????????其他每个节点都仅有一条入边,可能多条出边。

根节点:

? ? ? ? 唯一没有入边的节点。

路径:

? ? ? ? 由边连接的有序节点列表。

子节点:

? ? ? ? 一个节点通过出边与子节点相连。

父节点:

? ? ? ? 一个节点是其所有子节点的父节点。

兄弟节点:

? ? ? ? 具有同一个父节点的节点互称为兄弟节点。

子树:

? ? ? ? 一个父节点及其所有后代的节点和边构成一棵子树。

叶子节点:

? ? ? ? 没有子节点。

层数:

? ? ? ? 节点n的层数是从根节点到n的唯一路径长度。

高度:

? ? ? ? 其中节点层数的最大值。

?实现

"""
二叉树
    BinaryTree()          创建一个二叉树实例。
    getLeftChild()        返回当前节点的左子节点所对应的二叉树。
    getRightChild()       右子节点所对应的二叉树。 
    setRootVal(val)       在当前节点中存储参数val中的对象。
    getRootVal()          返回当前节点存储的对象。
    insertLeft(val)       新建一棵二叉树,并将其作为当前节点的左子节点。
    insertRight(val)      新建一棵二叉树,并将其作为当前节点的左子节点。
实现树的关键在于选择一个好的内部存储技巧。
Python:
    列表之列表:
        表示子树的列表结构符合树的定义,这样的结构是递归的!由一个根节点和两个空列表
        构成的子树是一个叶子节点。还有一个很好的性质,那就是这种表示法可以推广到有很
        多子树的情况。如果不是二叉树,则多一棵子树只是多一个列表。
"""
# 创建可用于标准列表的函数,将列表作为树使用,正式定义树数据结构。
def BinaryTree(r):
    return [r, [], []]

def insertLeft(root, newBranch):
    t = root.pop(1)
    if len(t) > 1:
        root.insert(1, [newBranch, t, []])
    else:
        root.insert(1, [newBranch, [], []])
    return root

def insertRight(root, newBranch):
    t = root.pop(2)
    if len(t) > 1:
        root.insert(2, [newBranch, [], t])
    else:
        root.insert(2, [newBranch, [], []])
    return root

def getRootVal(root):
    return root[0]

def setRootVal(root, newVal):
    root[0] = newVal

def getLeftChild(root):
    return root[1]

def getRightChild(root):
    return root[2]

r = BinaryTree(3)
print(r)
insertLeft(r, 4)
print(r)
insertLeft(r, 5)
print(r)
insertRight(r, 6)
print(r)
insertRight(r, 7)
print(r)
l = getLeftChild(r)
print(l)
setRootVal(l, 9)
print(r)
insertLeft(l,11)
print(r)
print(getRightChild(getRightChild(r)))

树的第二种表示法是利用节点和引用。

"""
这种表示法遵循面向对象编程范式。
如果存在则原来的节点降一级。
"""
class BinaryTree:
    def __init__(self, rootObj):
        self.key = rootObj
        self.leftChild = None
        self.rightChild = None

    def insertLeft(self, newNode):
        if self.leftChild == None:
            self.leftChild = BinaryTree(newNode)
        else:
            t = BinaryTree(newNode)
            t.leftChild = self.leftChild
            self.leftChild = t

    def insertRight(self, newNode):
        if self.rightChild == None:
            self.rightChild = BinaryTree(newNode)
        else:
            t = BinaryTree(newNode)
            t.rightChild = self.rightChild
            self.rightChild = t
    
    def getRightChild(self):
        return self.rightChild

    def getLeftChild(self):
        return self.leftChild

    def setRootVal(self, obj):
        self.key = obj

    def getRootVal(self):
        return self.key
r = BinaryTree('a')
print(r.getRootVal())
print(r.getLeftChild())
r.insertLeft("b")
print(r)
print(r.getLeftChild())
print(r.getLeftChild().getRootVal())
r.insertRight('c')
print(r.getRightChild())
print(r.getRightChild().getRootVal())
r.getRightChild().setRootVal("hello")
print(r.getRightChild().getRootVal())

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-30 22:47:07  更:2021-07-30 22:47:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 17:27:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码