二叉树排序

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/5/5 上午10:34
# @Author  : MXi4oyu
# @Site    : 
# @File    : PyBtreeSort.py
# @Software: PyCharm


class PyBtree:
    def __init__(self,value):
        self.left = None  #左节点
        self.data = value #节点值
        self.right = None #右节点

    def insertLeft(self,value):
        self.left= PyBtree(value)
        return self.left

    def insertRight(self,value):
        self.right = PyBtree(value)
        return self.right

    def show(self):
        print(self.data)


#中序遍历:如果二叉树不为空,则先访问左子树,然后访问根节点,最后访问右子树
def inorder(node):
    if node.data:
        if node.left:
            inorder(node.left)
        node.show()
        if node.right:
            inorder(node.right)

#中序遍历,先遍历右子树
def rinorder(node):
    if node.data:
        if node.right:
            rinorder(node.right)
        node.show()
        if node.left:
            rinorder(node.left)

def insert(node,value):
    if value > node.data:
        if node.right:
            insert(node.right,value)

        else:
            node.insertRight(value)

    else:
        if node.left:
            insert(node.left,value)
        else:
            node.insertLeft(value)


if __name__=='__main__':
    blist=[3,6,7,2,1,0,23,9,8,4]

    Root=PyBtree(blist[0])
    node = Root
    for i in range(1,len(blist)):
        insert(Root,blist[i])

    print("******从小到大排序******")
    inorder(Root)
    print("******从大到小排序******")
    rinorder(Root)

猜你喜欢

转载自blog.csdn.net/mypc2010/article/details/80203719