繁体   English   中英

python中的二进制搜索树实现

[英]binary search tree impelemntation in python

我正在尝试实现二进制搜索树,但在节点插入时遇到了一些问题。 谁能帮我指出我的python程序出了什么问题? addChild()函数未正确添加左子项(4,“ hans”)? 我的递归函数有问题吗? 提前致谢。

class Node:
    def __init__(self, key = None, value = None, leftChild = None, rightChild = None, parent = None):
        self.key = key
        self.value = value
        self.leftChild = leftChild
        self.rightChild = rightChild
        self.parent = parent

    def get_key(self):
        return self.key

    def get_value(self):
        return self.value

    def get_leftChild(self):
        return self.leftChild    

    def get_rightChild(self):
        return self.rightChild

    def set_leftChild(self, key, value):
        node = Node(key, value, None, None, self)
        self.leftChild = node

    def set_rightChild(self, key, value):
        node = Node(key, value, None, None, self)
        self.rightChild = node 

    def isLeaf(self):
        if self.leftChild is None and self.rightChild is None:
           return True
        else:
           return False   

class BinaryTree:
    def __init__(self, key = None, value = None, leftChild = None, rightChild = None, parent = None):
        self.root = Node(key, value, leftChild = None, rightChild = None, parent = None)

    def addChild(self, key, value):
        current = self.root
        if current is None:
           current = Node(key, value, leftChild = None, rightChild = None, parent = None)
        else:   
           self._addChild(current, key, value)

    def _addChild(self, current, key, value):                
        if current is None:
           current = Node(key, value, leftChild = None, rightChild = None, parent = current)
           return 

        if current.isLeaf() is True:
            if current.get_key() > key:
               current.set_leftChild(key, value)
            else:
               current.set_rightChild(key, value)
            return
        elif current.get_key() > key:
                return self._addChild(current.get_leftChild(), key, value) 
        elif current.get_key() <= key:                
                return self._addChild(current.get_rightChild(), key, value)

    def traversalInOrder(self):
        if self.root is None:
            return None 
        else:   
            self._traversalInOrder(self.root)            

obj = BinaryTree(10, "ram")
obj.addChild(12, "hari")
obj.addChild(4, "hans")

current is None ,您实际上并不将值存储在树中,而仅存储在局部变量中。

这样,它应该可以工作:

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

    def addChild(self, key, value):
        current = self.root
        if current is None:
          self.root = Node(key, value, leftChild = None, rightChild = None, parent = None)
        else:  
          self._addChild(current, key, value)

    def _addChild(self, current, key, value):                
        if current.get_key() > key:
          child = current.get_leftChild()
          if child is None:
            current.set_leftChild(key, value)
          else:
            self._addChild(child, key, value) 
        else:
          child = current.get_rightChild()
          if child is None:
            current.set_rightChild(key, value)
          else:
            self._addChild(child, key, value) 


obj = BinaryTree()
obj.addChild(10, "ram")
obj.addChild(12, "hari")
obj.addChild(4, "hans")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM