算法导论程序27-什么是二叉搜索树

一棵二叉搜索树是以一棵二叉树来组织的。这样一棵树可以使用链表数据结构来表示,其中,每个结点就是一个对象,除了key和卫星数据之外,每个结点还包含属性left、right和p,它们分别指向结点的左孩子、右孩子和双亲。如果某个孩子结点和父结点不存在,则相应属性的值为NIL。根结点是树中唯一父指针为NIL的结点。


设x是二叉搜索树中的一个结点,如果y是x左子树中的一个结点,那么y.key<=x.key。如果y是x右子树中的一个结点,那么y.key>=x.key。 

中序遍历(inorder tree walk):子树根的关键字位于其左子树关键字值和右子树的关键字值之间。

先序遍历(preorder tree walk):输出的根关键字在其左右子树的关键字值之前。

后序遍历(postorder tree walk):输出的根关键字在其左右子树的关键字值之后。

class Node:
    def __init__(self,key,right,left,p):
        self.key=key
        self.right=right
        self.left=left
        self.p=p

class tree:
    def __init__(self,root):
        self.root=root
    def tree_insert(self,z):
        y=None
        x=self.root
        while x!=None:
            y=x
            if z.key<x.key:
                x=x.left
            else:
                x=x.right
        z.p=y
        if y==None:
            self.root=z
        elif z.key<y.key:
            y.left=z
        else:
            y.right=z
    def inorder_tree_walk(self,x):
        if x!=None:
            self.inorder_tree_walk(x.left)
            print(x.key)
            self.inorder_tree_walk(x.right)
运行结果:

>>> r=Node(12,None,None,None)
>>> t=tree(None)
>>> t.tree_insert(r)
>>> r=Node(5,None,None,None)
>>> t.tree_insert(r)
>>> t.inorder_tree_walk(t.root)
5
12
>>> r=Node(18,None,None,None)
>>> t.tree_insert(r)
>>> r=Node(2,None,None,None)
>>> t.tree_insert(r)
>>> r=Node(9,None,None,None)
>>> t.tree_insert(r)
>>> r=Node(15,None,None,None)
>>> t.tree_insert(r)
>>> r=Node(19,None,None,None)
>>> t.tree_insert(r)
>>> r=Node(17,None,None,None)
>>> t.tree_insert(r)
>>> r=Node(13,None,None,None)
>>> t.tree_insert(r)
>>> t.inorder_tree_walk(t.root)
2
5
9
12
13
15
17
18
19




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值