python - 如何实现二叉树?

标签 python algorithm search data-structures binary-tree

在 Python 中可用于实现二叉树的最佳数据结构是什么?

最佳答案

这是我对二叉搜索树的简单递归实现。

#!/usr/bin/python

class Node:
    def __init__(self, val):
        self.l = None
        self.r = None
        self.v = val

class Tree:
    def __init__(self):
        self.root = None

    def getRoot(self):
        return self.root

    def add(self, val):
        if self.root is None:
            self.root = Node(val)
        else:
            self._add(val, self.root)

    def _add(self, val, node):
        if val < node.v:
            if node.l is not None:
                self._add(val, node.l)
            else:
                node.l = Node(val)
        else:
            if node.r is not None:
                self._add(val, node.r)
            else:
                node.r = Node(val)

    def find(self, val):
        if self.root is not None:
            return self._find(val, self.root)
        else:
            return None

    def _find(self, val, node):
        if val == node.v:
            return node
        elif (val < node.v and node.l is not None):
            return self._find(val, node.l)
        elif (val > node.v and node.r is not None):
            return self._find(val, node.r)

    def deleteTree(self):
        # garbage collector will do this for us. 
        self.root = None

    def printTree(self):
        if self.root is not None:
            self._printTree(self.root)

    def _printTree(self, node):
        if node is not None:
            self._printTree(node.l)
            print(str(node.v) + ' ')
            self._printTree(node.r)

#     3
# 0     4
#   2      8
tree = Tree()
tree.add(3)
tree.add(4)
tree.add(0)
tree.add(8)
tree.add(2)
tree.printTree()
print(tree.find(3).v)
print(tree.find(10))
tree.deleteTree()
tree.printTree()

关于python - 如何实现二叉树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2598437/

相关文章:

python - Pandas 数据框的 3D 绘图

python - pygame 的问题

c - [-1,1] 上反正切的最佳机器优化多项式极大极小近似?

使用动态内容搜索单个页面

python - Pandas 在选择前获得索引值 n 个位置

Python - 实现函数

c++ - 有效地填补有序数字列表中的第一个空白

algorithm - 比较遗传算法(GA)的结构和粒子群优化(PSO)的结构

java - 在大型 CSV 中查找行的最简单、最快的方法

search - 扩展 Orchard 搜索和索引