当前位置:   article > 正文

二叉搜索(排序)树的python实现_python二叉排序树的包

python二叉排序树的包

二叉搜索树依赖于这样的一个性质:小于父节点的节点都在左子树中,大于父节点的节点都在右子树中。

首先定义BST(BinarySearchTree)类和Node类:

  1. class Node:
  2. def __init__(self,val):
  3. self.val=val
  4. self.lt=None
  5. self.rt=None
  6. self.parent=None
  1. class BST:
  2. def __init__(self,node_list=None):
  3. if node_list==None:
  4. self.root=None
  5. else:
  6. self.root=Node(node_list[0])
  7. for i in node_list:
  8. self.insert(i)

初始化BST类时调用了insert函数,当插入一个节点到BST中时,首先比较插入节点与根节点的大小,如果插入节点小于根节点,则比较插入节点与左孩子大小,如果插入节点大于根节点,则比较插入节点与右孩子大小,一直循环下去直到寻找到插入位置。

非递归版:

  1. def insert(self,val):
  2. if not self.root:
  3. self.root=Node(val)
  4. else:
  5. new=Node(val)
  6. temp=self.root
  7. while temp:
  8. if val<=temp.val:
  9. cur=temp
  10. temp=temp.lt
  11. else:
  12. cur=temp
  13. temp=temp.rt
  14. new.parent=cur
  15. if val<=cur.val:
  16. cur.lt=new
  17. else:
  18. cur.rt=new

当搜索某个元素是否在BST中时,用到search函数。和insert函数一样,首先从根节点搜索,如果目标元素小于根节点,则查询左子树,否则查询右子树,直到搜索到目标元素。

非递归版:

  1. def search(self,obj):
  2. cur=self.rt
  3. while cur:
  4. if cur.val==obj:
  5. print('Find!')
  6. return
  7. if obj<cur.val:
  8. cur=cur.lt
  9. else:
  10. cur=cur.rt
  11. if not cur:
  12. print('No Find!')

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/993244
推荐阅读
相关标签
  

闽ICP备14008679号