美文网首页Pythoner
Python 二叉树查找 前序 中序 后序遍历

Python 二叉树查找 前序 中序 后序遍历

作者: minimore | 来源:发表于2016-03-29 18:59 被阅读838次
    # -*- coding: utf-8 -*-
    # author: zhonghua
    # filename: search_binarytree.py
    # create: 2016/3/29
    # version: 1.0
    
    # 二叉树查找
    # 1.生成二叉树
    # 2.遍历查找
    
    class Node:
        def __init__(self, data, left, right):
            self._data = data
            self._left = left
            self._right = right
    
    class BinaryTree:
        def __init__(self):
            self._root = None
    
        def make_tree(self, node):
            self._root = node
    
        def insert(self, node):
            def insert_node(tree_node, node):
                if tree_node._data >= node._data:
                    if tree_node._left is None:
                        tree_node._left = node
                    else:
                        insert_node(tree_node._left, node)
                else:
                    if tree_node._right is None:
                        tree_node._right = node
                    else:
                        insert_node(tree_node._right, node)
            insert_node(self._root, node)
    
        def search(self, data):
            def search_node(tree_node, data):
                if tree_node._data == data:
                    print 'success.'
                    return
                elif tree_node._data >= data:
                    if tree_node._left is None:
                        return
                    else:
                        search_node(tree_node._left, data)
                else:
                    if tree_node._right is None:
                        return
                    else:
                        search_node(tree_node._right, data)
            search_node(self._root, data)
    
        def pre_order(self):
            lst = []
            def order(node):
                # print node._data
                lst.append(node._data)
                if node._left is not None:
                    order(node._left)
                if node._right is not None:
                    order(node._right)
            order(self._root)
            print lst
    
        def in_order(self):
            lst = []
            def order(node):
                if node._left is not None:
                    order(node._left)
                # print node._data
                lst.append(node._data)
                if node._right is not None:
                    order(node._right)
            order(self._root)
            print lst
    
        def post_order(self):
            lst = []
            def order(node):
                if node._left is not None:
                    order(node._left)
                if node._right is not None:
                    order(node._right)
                # print node._data
                lst.append(node._data)
            order(self._root)
            print lst
    
    if __name__ == '__main__':
        lst = [12, 9, 7, 19, 3, 8, 52, 106, 70, 29, 20, 16, 8, 50, 22, 19]
        tree = BinaryTree()
        # 生成二叉树
        for (i, j) in enumerate(lst):
            node = Node(j, None, None)
            if i == 0:
                tree.make_tree(node)
            else:
                tree.insert(node)
        # 二叉树查找
        tree.search(70)
        # 二叉树遍历,前序、中序、后序
        tree.pre_order()
        tree.in_order()
        tree.post_order()
    

    相关文章

      网友评论

        本文标题:Python 二叉树查找 前序 中序 后序遍历

        本文链接:https://www.haomeiwen.com/subject/xwyslttx.html