树的实现

python实现树

class BinaryTree:
    def __init__(self,rootObj):
        self.key = rootObj
        self.leftChild = None
        self.rightChild = None

    def insertLeft(self,newNode):
        if self.leftChild == None:
            self.leftChild = BinaryTree(newNode)
        else:
            t = BinaryTree(newNode)
            t.leftChild = self.leftChild
            self.leftChild = t

    def insertRight(self,newNode):
        if self.rightChild == None:
            self.rightChild = BinaryTree(newNode)
        else:
            t = BinaryTree(newNode)
            t.rightChild = self.rightChild
            self.rightChild = t

    def getRightChild(self):
        return self.rightChild

    def getLeftChild(self):
        return self.leftChild

    def setRootVal(self,obj):
        self.key = obj

    def getRootVal(self):
        return  self.key

需要注意的是,插入左右子节点的时候:
先判断之前的结点是否为空,如果为空则直接插入,如果非空,将要插入的节点作为父节点,将原有的节点作为子节点。
测试,创建如下图所示的树:

r = BinaryTree('a')
r.insertLeft('b')
r.insertRight('c')
r.getLeftChild().insertLeft('d')
r.getLeftChild().insertRight('e')
r.getRightChild().insertLeft('f')


print(r.getRootVal())
print(r.getLeftChild().getRootVal())
print(r.getRightChild().getRootVal())
print(r.getLeftChild().getLeftChild().getRootVal())
print(r.getLeftChild().getRightChild().getRootVal())
print(r.getRightChild().getLeftChild().getRootVal())
print(r.getRightChild().getRightChild())

测试一下插入节点时候原来为空节点和非空节点的情况:

r = BinaryTree('a')
r.insertLeft('b')
print(r.getLeftChild().getRootVal())
print(r.getLeftChild().getLeftChild())
r.insertLeft('x')
print(r.getLeftChild().getRootVal())
print(r.getLeftChild().getLeftChild().getRootVal())
posted @ 2019-01-06 12:19  youngliu91  阅读(99)  评论(0编辑  收藏  举报