分享python实现的二叉树定义与遍历


本文摘自php中文网,作者零下一度,侵删。

这篇文章主要介绍了python实现的二叉树定义与遍历算法,结合具体实例形式分析了基于Python定义的二叉树及其常用遍历操作实现技巧,需要的朋友可以参考下

本文实例讲述了python实现的二叉树定义与遍历算法。分享给大家供大家参考,具体如下:

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


1

2

3

4

5

6

7

8

9

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

# -*- 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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

中序遍历

-1

1

3

4

5

层序遍历

3

-1

4

1

5

前序遍历

3

-1

1

4

5

后序遍历

1

-1

5

4

3

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

以上就是分享python实现的二叉树定义与遍历的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

分享Python snownlp的实例教程

Python语言及其特点简介

Python适合在什么系统

详解增强算术赋值“-=”操作

Python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别

Python axis是什么意思

Python处理excel xlrd的方法介绍

Python实现读写excel和修改excel的代码

如何将字符串转换为datetime

Python多线程的优点是什么?六大优点助你了解多线程

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...