zoukankan      html  css  js  c++  java
  • 【算法导论】二叉搜索树的删除除操作

    对于二叉搜索树T,用一颗子树v代替子树u的操作TANSPLANT(T,u,v).

    TANSPLANT(T, u, v)
    	if u.p == NIL
    		T.root = v
    	elseif u == u.p.left
    		u.p.left = v
    	else u.p.right = v
    	if v != NIL
    	 v.p = u.p
    

    删除二叉搜索树T中的一个结点z,该节点z有三种情况:

    • z没有或只有一个右儿子
    • z.p只有一个左儿子
    • z有两个儿子(在其右子树中找出含有最小关键字值的节点即中序后继)
      • z的中序后继为z的右儿子
      • z的中序后继不是z的儿子
    TREE-DELETE(T,z)
    if z.left == NIL
    	TRANSPLANT(T,z,z.right)
    elseif z.right == NIL
    	TRANSPLANT(T,z,z.left)	
    else y = TREE-MINIMUM(z.right)
    	if y.p != z
    		TRANSPLANT(T, y, y.right)
    		y.right = z.right
    		y.right.p = y
    	TRANSPLANT(T, z, y)
    	y.left = z.left
    	z.left.p = y
    
  • 相关阅读:
    作业5,6 2019/10/23
    作业1、2、3、4 2019/10/23
    实现Map传参Mybatis
    maven工程配置pom.xml实现mybatis的访问数据库操作
    测试
    Postman篇之命令行测试
    unittest框架
    测试
    测试
    测试
  • 原文地址:https://www.cnblogs.com/bitbitbyte/p/12536603.html
Copyright © 2011-2022 走看看