亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何實現二叉樹?

如何實現二叉樹?

慕無忌1623718 2019-11-22 15:57:14
哪種數據結構可用于在Python中實現二叉樹?
查看完整描述

3 回答

?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

這是二進制搜索樹的簡單遞歸實現。


#!/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 == None):

            self.root = Node(val)

        else:

            self._add(val, self.root)


    def _add(self, val, node):

        if(val < node.v):

            if(node.l != None):

                self._add(val, node.l)

            else:

                node.l = Node(val)

        else:

            if(node.r != None):

                self._add(val, node.r)

            else:

                node.r = Node(val)


    def find(self, val):

        if(self.root != 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 != None):

            self._find(val, node.l)

        elif(val > node.v and node.r != None):

            self._find(val, node.r)


    def deleteTree(self):

        # garbage collector will do this for us. 

        self.root = None


    def printTree(self):

        if(self.root != None):

            self._printTree(self.root)


    def _printTree(self, node):

        if(node != 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()


查看完整回答
反對 回復 2019-11-22
?
LEATH

TA貢獻1936條經驗 獲得超7個贊

# simple binary tree

# in this implementation, a node is inserted between an existing node and the root



class BinaryTree():


    def __init__(self,rootid):

      self.left = None

      self.right = None

      self.rootid = rootid


    def getLeftChild(self):

        return self.left

    def getRightChild(self):

        return self.right

    def setNodeValue(self,value):

        self.rootid = value

    def getNodeValue(self):

        return self.rootid


    def insertRight(self,newNode):

        if self.right == None:

            self.right = BinaryTree(newNode)

        else:

            tree = BinaryTree(newNode)

            tree.right = self.right

            self.right = tree


    def insertLeft(self,newNode):

        if self.left == None:

            self.left = BinaryTree(newNode)

        else:

            tree = BinaryTree(newNode)

            tree.left = self.left

            self.left = tree



def printTree(tree):

        if tree != None:

            printTree(tree.getLeftChild())

            print(tree.getNodeValue())

            printTree(tree.getRightChild())




# test tree


def testTree():

    myTree = BinaryTree("Maud")

    myTree.insertLeft("Bob")

    myTree.insertRight("Tony")

    myTree.insertRight("Steven")

    printTree(myTree)

在此處了解更多信息:-這是二進制樹的非常簡單的實現。


查看完整回答
反對 回復 2019-11-22
?
慕萊塢森

TA貢獻1810條經驗 獲得超4個贊

BST在Python中的簡單實現


class TreeNode:

    def __init__(self, value):

        self.left = None

        self.right = None

        self.data = value


class Tree:

    def __init__(self):

        self.root = None


    def addNode(self, node, value):

        if(node==None):

            self.root = TreeNode(value)

        else:

            if(value<node.data):

                if(node.left==None):

                    node.left = TreeNode(value)

                else:

                    self.addNode(node.left, value)

            else:

                if(node.right==None):

                    node.right = TreeNode(value)

                else:

                    self.addNode(node.right, value)


    def printInorder(self, node):

        if(node!=None):

            self.printInorder(node.left)

            print(node.data)

            self.printInorder(node.right)


def main():

    testTree = Tree()

    testTree.addNode(testTree.root, 200)

    testTree.addNode(testTree.root, 300)

    testTree.addNode(testTree.root, 100)

    testTree.addNode(testTree.root, 30)

    testTree.printInorder(testTree.root)


查看完整回答
反對 回復 2019-11-22
  • 3 回答
  • 0 關注
  • 851 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號