1. 二叉查找树的定义:

左子树不为空的时候。左子树的结点值小于根节点,右子树不为空时,右子树的结点值大于根节点。左右子树分别为二叉查找树

2. 二叉查找树的最左边的结点即为最小值,要查找最小值。仅仅需遍历左子树的结点直到为空为止。同理,最右边的结点结尾最大值。要查找最大值,仅仅需遍历右子树的结点直到为空为止。二叉查找树的插入查找和删除都是通过递归的方式来实现的,删除一个结点的时候,先找到这个结点S,假设这个结点左右孩子都不为空,这时并非真正的删除这个结点S,而是在其右子树找到后继结点,将后继结点的值付给S,然后删除这个后继结点就可以。

假设结点S的左孩子或者右孩子为空,能够直接删除这个结点S。

3. 二叉查找树的python实现:

class TreeNode:
def __init__(self,val):
self.val=val;
self.left=None;
self.right=None;
def insert(root,val):
if root is None:
root=TreeNode(val);
else:
if val<root.val:
root.left=insert(root.left,val); #递归地插入元素
elif val>root.val:
root.right=insert(root.right,val);
return root; def query(root,val):
if root is None:
return ;
if root.val is val:
return 1;
if root.val <val:
return query(root.right,val); #递归地查询
else:
return query(root.left,val);
def findmin(root):
if root.left:
return findmin(root.left);
else:
return root; def delnum(root,val):
if root is None:
return ;
if val<root.val:
return delnum(root.left,val);
elif val>root.val:
return delnum(root.right,val);
else: # 删除要区分左右孩子是否为空的情况
if(root.left and root.right): tmp=finmin(root.right); #找到后继结点
root.val=tmp.val;
root.right=delnum(root.right,val); #实际删除的是这个后继结点 else:
if root.left is None:
root=root.right;
elif root.right is None:
root=root.left;
return root; #測试代码
root=TreeNode(3);
root=insert(root,2);
root=insert(root,1);
root=insert(root,4); #print query(root,3);
print query(root,1);
root=delnum(root,1);
print query(root,1);

最新文章

  1. Xcode 如何删除过期的Provisioning Profile文件
  2. grootjs 简明教程
  3. interviewbit : Max Non Negative SubArrayBookmark Suggest Edit
  4. android 工具类之SharePreference
  5. 关于SQL Server数据表的五中约束
  6. javascript 事件响应
  7. PyCharm 2017 免费 破解 注册 激活 教程(附 License Server 地址)(Python 编辑器 IDE 推荐)
  8. Sequence one
  9. 关于web变量配置问题
  10. SSM-SpringMVC-04:SpringMVC深入浅出理解HandleMapping(源码刨析)
  11. 中国建设工程造价管理系统 http://zaojiasys.jianshe99.com/cecaopsys/
  12. 字符型转换为字符串ToString
  13. html模板输头部出现&quot;&amp;#65279&quot;
  14. 【Pyhon】利用BurpSuite到SQLMap批量测试SQL注入
  15. CentOS7搭建elasticsearch集群
  16. python开发_tkinter_复选菜单
  17. docker故障问题修复
  18. C#中Uri类的解释
  19. Java遍历List集合的三种方法
  20. 【vim环境配置】解决ubuntu上 由YouCompleteMe插件配置不当引起的 自动补全失效的问题

热门文章

  1. django的rest framework框架——安装及基本使用
  2. skkyk:题解 洛谷P3865 【【模板】ST表】
  3. centos7中的网卡一致性命名规则、网卡重命名方法
  4. windows下在指定目录下打开命令行
  5. TOJ 2017: N-Credible Mazes
  6. javascript异常cannot read property xx of null 的错误
  7. “玲珑杯”ACM比赛 Round #13 B -- 我也不是B,倍增+二分!
  8. “玲珑杯”ACM比赛 Round #11 " ---1097 - 萌萌哒的第二题
  9. BZOJ1833 [ZJOI2010]count 数字计数 【数学 Or 数位dp】
  10. c++ 多线程:线程句柄可以提前关闭,但是线程并没有关闭