[数据结构与算法分析(Mark Allen Weiss)]二叉树的插入与删除 @ Python

二叉树的插入与删除,来自Mark Allen Weiss的《数据结构与算法分析》。

# Definition for a  binary tree node
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

class BinarySearchTree:
    # @param root, a tree node
    # @return a list of integers
    def Insert(self, root, x):
        if root == None:
            root = TreeNode(x)
        else:
            if x < root.val:
                root.left = self.Insert(root.left, x)
            if x > root.val:
                root.right = self.Insert(root.right, x)
        return root

    def Delete(self, root, x):
        if root:
            if x < root.val:
                root.left = self.Delete(root.left, x)
            elif x > root.val:
                root.right = self.Delete(root.right, x)
            elif root.left and root.right:
                tmp = self.FindMin(root.right)
                root.val = tmp.val
                root.right = self.Delete(root.right, root.val)
            elif root.left: root = root.left
            elif root.right: root = root.right
        return root

    def FindMin(self, root):
        if root:
            while root.left:
                root = root.left
        
        return root

    def preorder(self, root):
        if root:
            print root.val
            self.preorder(root.left)
            self.preorder(root.right)

Tree = BinarySearchTree()
root = None
list = [6, 2, 8, 1, 5, 3, 4]
for i in range(len(list)):
    root = Tree.Insert(root, list[i])
Tree.preorder(root)
Tree.Delete(root, 2)
Tree.preorder(root)

 

[数据结构与算法分析(Mark Allen Weiss)]二叉树的插入与删除 @ Python,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。