python3数据结构4

一、二叉查找树
1.理解树和图的术语和表示
2.理解二叉搜索树的重要性
3.在二叉查找树中实现插入、搜索和遍历
树是一种非线性的数据结构。它基本上是一个图,不形成任何循环,没有孤立的边或顶点。
如果树的每个节点都有两个子节点,除了最后一层没有子节点之外,就称为完全二叉树。
树的术语;
在这里插入图片描述
树的创建:

class Node:
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None

    def PrintTree(self):
        print(self.data)
root = Node(10)
root.PrintTree()

树的插入:

class Node:
    def __init__(self, data):
        self.left = None
        self.right = None
        self.data = data

    def insert(self, data):
        if self.data:
            if data < self.data:
                if self.left is None:
                    self.left = Node(data)
                else:
                    self.left.insert(data)
            elif data > self.data:
                if self.right is None:
                    self.right = Node(data)
                else:
                    self.right.insert(data)
        else:
            self.data = data

    def PrintTree(self):
        if self.left:
            self.left.PrintTree()
        print( self.data),
        if self.right:
            self.right.PrintTree()

root = Node(1)
root.insert(3)
root.insert(6)
root.insert(10)


root.PrintTree()

树遍历:中序、前序和后序.

class Node:
    def __init__(self, data):
        self.left = None
        self.right = None
        self.data = data

    def insert(self, data):
        if self.data:
            if data < self.data:
                if self.left is None:
                    self.left = Node(data)
                else:
                    self.left.insert(data)
            elif data > self.data:
                if self.right is None:
                    self.right = Node(data)
                else:
                    self.right.insert(data)
        else:
            self.data = data

    def PrintTree(self):
        if self.left:
            self.left.PrintTree()
        print( self.data),
        if self.right:
            self.right.PrintTree()

    # 中序遍历
    # Left -> Root -> Right
    def inorderTraversal(self, root):
        res = []
        if root:
            res = self.inorderTraversal(root.left)
            res.append(root.data)
            res = res + self.inorderTraversal(root.right)
        return res
    #先序遍历
    #Root->Left->Right
    def PreorderTraversal(self, root):
        res = []
        if root:
            res.append(root.data)
            res = res + self.PreorderTraversal(root.left)
            res = res + self.PreorderTraversal(root.right)
        return  res
    #后序遍历
    #Left->Right->Root
    def PostorderTraversal(self, root):
        res =[]
        if root:
            res = self.PostorderTraversal(root.left)
            res = res + self.PostorderTraversal(root.right)
            res.append(root.data)
        return res
root = Node(27)
root.insert(14)
root.insert(35)
root.insert(10)

root.PrintTree()
print(root.inorderTraversal(root))
print(root.PreorderTraversal(root))
print(root.PostorderTraversal(root))

结果:

10
14
27
35
[10, 14, 27, 35]
[27, 14, 10, 35]
[10, 14, 35, 27]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值