python实现二叉树

 初学python,需要实现一个决策树,首先实践一下利用python实现一个二叉树数据结构。建树的时候做了处理,保证建立的二叉树是平衡二叉树。

# -*- coding: utf-8 -*-
from collections import deque
class Node:
    def __init__(self,val,left=None,right=None):
        self.val=val
        self.left=left
        self.right=right
    #setter and getter
    def get_val(self):
        return self.val
    def set_val(self,val):
        self.val=val
    def get_left(self):
        return self.left
    def set_left(self,left):
        self.left=left
    def get_right(self):
        return self.right
    def set_right(self,right):
        self.right=right
class Tree:
    def __init__(self,list):
        list=sorted(list)
        self.root=self.build_tree(list)
    #递归建立平衡二叉树
    def build_tree(self,list):
        l=0
        r=len(list)-1
        if(l>r):
            return None
        if(l==r):
            return Node(list[l])
        mid=(l+r)/2
        root=Node(list[mid])
        root.left=self.build_tree(list[:mid])
        root.right=self.build_tree(list[mid+1:])
        return root




    #前序遍历
    def preorder(self,root):
        if(root is None):
            return
        print root.val
        self.preorder(root.left)
        self.preorder(root.right)
    #后序遍历
    def postorder(self,root):
        if(root is None):
            return
        self.postorder(root.left)
        self.postorder(root.right)
        print root.val
    #中序遍历
    def inorder(self,root):
        if(root is None):
            return
        self.inorder(root.left)
        print root.val
        self.inorder(root.right)
    #层序遍历
    def levelorder(self,root):
        if root is None:
            return
        queue =deque([root])
        while(len(queue)>0):
            size=len(queue)
            for i in range(size):
                node =queue.popleft()
                print node.val
                if node.left is not None:
                    queue.append(node.left)
                if node.right is not None:
                    queue.append(node.right)

list=[1,-1,3,4,5]
tree=Tree(list)
print '中序遍历:'
tree.inorder(tree.root)
print '层序遍历:'
tree.levelorder(tree.root)
print '前序遍历:'
tree.preorder(tree.root)
print '后序遍历:'
tree.postorder(tree.root)

输出:

中序遍历
-1
1
3
4
5
层序遍历
3
-1
4
1
5
前序遍历
3
-1
1
4
5
后序遍历
1
-1
5
4
3

建立的二叉树如下图所示:

《python实现二叉树》

 

    原文作者:ZHOU YANG
    原文地址: https://www.cnblogs.com/zhoudayang/p/5130592.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞