首页 > 编程语言 > 详细

使用Python实现二叉树

时间:2019-09-26 14:56:28      阅读:105      评论:0      收藏:0      [点我收藏+]

树的概念
树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:        1. 每个节点有 零个或多个子节点;2. 没有父节点的节点称为根节点;3.每一个非根节点有且只有一个父节点;4.除了根节点外,每个子节点可以分为多个不相交的子树;


二叉树
每个节点最多含有两个子树的树称为二叉树,下面直接上代码:

[Python] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
class Node(object):
    """节点类"""
    def __init__(self, item):
        self.item = item
        self.lChild = None
        self.rChild = None
 
 
class Tree(object):
    """二叉树"""
    def __init__(self):
        #记录根节点
        self.root = None
 
    def add(self, item):
        # 添加节点
        # 完全二叉树,从上到下,从左往右
        node = Node(item)
        if self.root is None:
            self.root = node
        else:
            # 从上到下,从左往右 使用队列
            queue = []
            queue.append(self.root)
 
            while queue:
                child = queue.pop(0)
                if child.lChild is None:
                    child.lChild = node
                    return
                if child.rChild is None:
                    child.rChild = node
                    return
                queue.append(child.lChild)
                queue.append(child.rChild)
 
    # 广度优先遍历,层次遍历
    def breath_travel(self):
 
        if self.root is None:
            return
        queue = []
        queue.append(self.root)
 
        while queue:
 
            node = queue.pop(0)
            print(node.item, end=" ")
 
            if node.lChild is not None:
                queue.append(node.lChild)
            if node.rChild is not None:
                queue.append(node.rChild)
 
    # 深度优先遍历
    def depth_travel(self):
        self.post_order(self.root)
        print()
 
    # 先序 自己 左子树 右子树
    def pre_order(self, node):
        if node is None:
            return
        print(node.item, end=" ")
        self.pre_order(node.lChild)
        self.pre_order(node.rChild)
 
    # 中序  左子树 自己 右子树
    def in_order(self, node):
        if node is None:
            return
        self.in_order(node.lChild)
        print(node.item, end=" ")
        self.in_order(node.rChild)
 
    # 后序  左子树  右子树  自己
    def post_order(self, node):
        if node is None:
            return
        self.post_order(node.lChild)
        self.post_order(node.rChild)
        print(node.item, end=" ")
 
if __name__ == ‘__main__‘:
    tree = Tree()
    tree.add(0)
    tree.add(1)
    tree.add(2)
    tree.add(3)
    tree.add(4)
    tree.add(5)
    tree.add(6)
    tree.add(7)
    tree.add(8)
    tree.add(9)
 
    # tree.breath_travel()
    tree.depth_travel()

 

更多技术资讯可关注:gzitcast

使用Python实现二叉树

原文:https://www.cnblogs.com/heimaguangzhou/p/11590734.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!