[算法导论]二叉查找树的实现 @ Python
《算法导论》第三版的BST(二叉查找树)的实现:
class Tree: def __init__(self): self.root = None # Definition for a binary tree node class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None self.parent = None class Solution: # @param root, a tree node # @return an integer def TreeSearch(self, x, k): if x == None or x.val == k: return x if k < x.val: return self.TreeSearch(x.left, k) else: return self.TreeSearch(x.right, k) def IterativeTreeSearch(self, x, k): while x != None and x.val != k: if k < x.val: x = x.left else: x = x.right return x def TreeMinimum(self, x): while x.left != None: x = x.left return x def TreeMaximum(self, x): while x.right != None: x = x.right return x def TreeSuccessor(self, x): if x.right != None: return self.TreeMinimum(x) y = x.parent while y != None and x == y.right: x = y y = y.parent return y def TreeInsert(self, T, z): y = None x = T.root while x != None: y = x if z.val < x.val: x = x.left else: x = x.right z.parent = y if y == None: T.root = z elif z.val < y.val: y.left = z else: y.right = z def InorderTreeWalk(self, x): if x != None: self.InorderTreeWalk(x.left) print x.val self.InorderTreeWalk(x.right) def Transplant(self, 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 TreeDelete(self, T, z): if z.left == None: self.Transplant(T, z, z.right) elif z.right == None: self.Transplant(T, z, z.left) else: y = self.TreeMinimum(z.right) if y.parent != z: self.Transplant(T,y,y.right) y.right = z.right y.right.parent = y self.Transplant(T, z, y) y.left = z.left y.left.p = y # root = TreeNode(15) T = Tree() nodes = [6,18,3,7,17,20,2,4,13,9] s = Solution() for node in nodes: s.TreeInsert(T,TreeNode(node)) s.InorderTreeWalk(T.root) s.TreeDelete(T, T.root) s.InorderTreeWalk(T.root)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决