Python实现二叉树

来源:互联网 发布:裤子品牌 知乎 编辑:程序博客网 时间:2024/06/05 13:32

使用python实现的一个二叉树的实现方式(更新中)

对应letcode--538. Convert BST to Greater Tree

class TreeNode(object):    def __init__(self, x):        self.val = x        self.left = None        self.right = Noneclass Solution(object):    def convertBST(self, root):        """        :type root: TreeNode        :rtype: TreeNode        """        def visit1(root):            if root:                visit1(root.left)                vals.append(root.val)                visit1(root.right)        vals = []        visit1(root)        self.s = 0        def visit2(root):            if root:                visit2(root.right)                self.s += vals.pop()                root.val = self.s                visit2(root.left)        visit2(root)        return rootinput_5=TreeNode(5)input_18=TreeNode(18)input_all=TreeNode(2)input_all.left=input_5input_all.right=input_18slu_=Solution()print input_allt=slu_.convertBST(input_all)print t

关于二叉树的相关的操作如下

class TreeNode(object):    def __init__(self,data=0,left=0,right=0):        self.data = data        self.left = left        self.right = rightclass BTree(object):    def __init__(self,root=0):        self.root = root    def is_empty(self):        if self.root is 0:            return True        else:            return False    def preOrder(self,treenode):        if treenode is 0:            return        print treenode.data        self.preOrder(treenode.left)        self.preOrder(treenode.right)    def inOrder(self,treenode):        if treenode is 0:            return        self.inOrder(treenode.left)        print treenode.data        self.inOrder(treenode.right)    def postOrder(self,treenode):        if treenode is 0:            return        self.postOrder(treenode.left)        self.postOrder(treenode.right)        print treenode.datan1 = TreeNode(data=1)n2 = TreeNode(2,n1,0)n3 = TreeNode(3)n4 = TreeNode(4)n5 = TreeNode(5,n3,n4)n6 = TreeNode(6,n2,n5)n7 = TreeNode(7,n6,0)n8 = TreeNode(8)root = TreeNode('root',n7,n8)bt = BTree()print 'preOrder......'print bt.preOrder(root)print 'inOrder......'print bt.inOrder(bt.root)print 'postOrder.....'print bt.postOrder(bt.root)


原创粉丝点击