数据结构之树(一)

树(tree)与二叉树(binary tree)

树的概念可以对比单链表来,而且链表可以当作特殊的树。假如链表的next有两个以上的话,就会形成分叉,即树形结构。二叉树是指next指针只有两个以内。所以树跟二叉树是二维的数据结构。(区分图(graph),图结构中可能指向相同的元素,形成一个环。树是特殊化的图)

  • 元素之间非线性,不是一对一了。
  • 拥有相对的父节点与子节点。

存储形式

树存储结构

在这里插入图片描述

树与二叉树的区别是二叉树的兄弟最多为2,也就是一个父节点最多有两个字节点。大部分使用情况下,都是使用二叉树以及其变种结构(平衡二叉树(AVL)、二叉搜索树(右>左 、二分查找),红黑树(路径平衡)。。。),其中因为二叉搜索树可能不是平衡二叉树,为了不是最坏情况(O(n))插入删除与搜索,大部分语言实现二叉搜索树使用红黑树。

为什么出现树的结构?

一维的链表可以采用跳表来加速查找。但是现实以及工程问题都需要二维以上来形象描述解决问题,例如斐波那契额函数,用树形结构可以很好的看到函数运算的内容。以及各种棋类游戏,由一个节点扩散出好多个可以选择的节点(节点树多少决定棋类游戏的难度)。在这种树形结构选择能获胜的节点就是简单的游戏AI。

代码表现

二叉树(Binary Tree)

class BinaryTree:
    def __init__(self, x, left=None, right=None):
        self.val = x
        self.left = left
        self.right = right

    def __str__(self):
        if self.left is None and self.right is None:
            return str(self.val)
        return str(self.val) + '(' + str(self.left) + ',' + str(self.right) + ')'


tree = BinaryTree(1, BinaryTree(2, BinaryTree(4), BinaryTree(5)), BinaryTree(3, BinaryTree(6), BinaryTree(7)))
print(tree)  #1(2(4,5),3(6,7))

从返回括号形式看,树也可以描述为一种包含关系。1包含(2,3),2包含(4,5),3包含(6,7)。

二叉搜索树(Binary search tree)

class BST:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

    def insert(self, x):
        if x < self.val:
            if self.left is None:
                self.left = BST(x)
            else:
                self.left.insert(x)

        elif x > self
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值