Python 构造二叉搜索树

本文采用Python语言编写数据结构之二叉搜索树,主要实现二叉树的构造,插入数据,删除数据,以及二叉树的中序遍历,先序遍历,和后序遍历。
具体代码如下:

#构造二叉树结构,及属性
class Tree(object):
    def __init__(self):
        self.root=None
class Node(object):
    def __init__(self,x):
        self.key=x
        self.left=None
        self.right=None
        self.parent=None
#插入二叉树数据
def TreeInsert( T, z):
    y =None
    x = T.root
    while x != None:
        y = x
        if z.key < x.key:
            x = x.left
        else:
            x = x.right
    z.parent = y
    if y == None:
        T.root = z
    elif z.key < y.key:
        y.left = z
    else:
        y.right = z
    z.left = None
    z.right = None
    return z.key
#删除节点
def Transplant(T,u,v):
    if u.parent==None:
        T.root=v
    elif u==u.parent.left:
        u.parent.left=v
    else:
        u.parent.right=v
    if v!=None:
        v.parent=u.parent
def TreeMin(x):
    while x.left !=None:
        x=x.left
    return x
def TreeDelete(T,z):
    if z.left==None:
        Transplant(T,z,z.right)
    elif z.right==None:
        Transplant(T,z,z.left)
    else:
        y=TreeMin(z.right)
        if y.parent!=z:
            Transplant(T,y,y.right)
            y.right=z.right
            y.right.parent=y
        Transplant(T,z,y)
        y.left=z.left
        y.left.parent=y
    return z.key
#中序遍历
def Midsort(root):
    if root!= None:
        Midsort(root.left)
        if root.key!=0:
            print(root.key)
        Midsort(root.right)
#先序遍历
def Behsort(root):
    if root!= None:
        Behsort(root.left)
        Behsort(root.right)
        if root.key != 0:
            print(root.key)
#后序遍历
def Presort(root):
    if root!= None:
        if root.key != 0:
            print(root.key)
        Presort(root.left)
        Presort(root.right)
#构造二叉树实例对象
node=[5,9,6,8,7,2,1,10]
T=Tree()
#插入二叉树数据
for nodes in node:
    print('插入数据',TreeInsert(T,Node(nodes)))

#删去一个节点
print('删去节点',TreeDelete(T,T.root))
#中序遍历
print('中序遍历')
Midsort(T.root)
#后序遍历
print('后序遍历')
Behsort(T.root)
#先序遍历
print('先序遍历')
Presort(T.root)

运行结果如下:
这里写图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是一个简单的 Python 代码示例,用于打印二叉搜索树: ``` class Node: def __init__(self, val=None): self.val = val self.left = None self.right = None def printBST(node): if node is not None: printBST(node.left) print(node.val) printBST(node.right) # 测试样例 root = Node(5) root.left = Node(3) root.right = Node(7) root.left.left = Node(2) root.left.right = Node(4) root.right.left = Node(6) root.right.right = Node(8) printBST(root) ``` 这个代码使用递归的方式打印了二叉搜索树,它首先遍历左子树,然后打印当前节点,最后遍历右子树。在测试样例中,它将打印以下输出: ``` 2 3 4 5 6 7 8 ``` ### 回答2: 在Python中打印二叉搜索树可以使用中序遍历算法实现。中序遍历的顺序是先打印左子树,然后打印根节点,最后打印右子树。具体实现如下: 1. 首先,我们需要定义二叉搜索树的节点类,包括一个值属性和左右子节点属性。 ```python class TreeNode: def __init__(self, value): self.value = value self.left = None self.right = None ``` 2. 接下来,我们需要定义一个函数来执行中序遍历打印二叉搜索树。 ```python def in_order_traversal(node): if node: in_order_traversal(node.left) print(node.value) in_order_traversal(node.right) ``` 3. 最后,我们可以创建一个二叉搜索树实例,并调用中序遍历打印函数。 ```python # 创建二叉搜索树 root = TreeNode(5) root.left = TreeNode(3) root.right = TreeNode(7) root.left.left = TreeNode(2) root.left.right = TreeNode(4) root.right.left = TreeNode(6) root.right.right = TreeNode(8) # 打印二叉搜索树 in_order_traversal(root) ``` 运行上述代码,会按照中序遍历的顺序打印出二叉搜索树的节点值:2, 3, 4, 5, 6, 7, 8。 以上就是使用Python打印二叉搜索树的方法。 ### 回答3: 要打印一棵二叉搜索树,可以使用中序遍历的方式进行打印。 中序遍历是指首先遍历左子树,然后访问根节点,最后遍历右子树。对于二叉搜索树来说,中序遍历得到的结果是有序的。 下面是一个示例代码,用来打印一棵二叉搜索树: ```python class Node: def __init__(self, value): self.value = value self.left = None self.right = None def print_bst(root): if root is None: return print_bst(root.left) print(root.value) print_bst(root.right) # 构造二叉搜索树 root = Node(4) root.left = Node(2) root.right = Node(6) root.left.left = Node(1) root.left.right = Node(3) root.right.left = Node(5) root.right.right = Node(7) # 打印二叉搜索树 print_bst(root) ``` 运行以上代码,会按照升序打印出二叉搜索树中的所有元素: ``` 1 2 3 4 5 6 7 ``` 这就是利用中序遍历打印二叉搜索树的方法。注意,这里假设二叉搜索树中的元素是互不相同的,否则输出结果可能会有重复。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值