首页 > 编程语言 > 详细

python中基本数据结构(四)

时间:2020-03-24 17:49:02      阅读:69      评论:0      收藏:0      [点我收藏+]

  二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。

  二叉树的创建:

  

# 创建二叉树节点
class TreeNode(object):

    # 初始化节点
    def __init__(self,data,left_node=None,right_node=None):
        self.data=data
        self.left=left_node
        self.right=right_node

    # 返回节点信息
    def __str__(self):
        return str(self.data)

# 二叉树的输出
def print_tree(node=None,is_child=False,deep=3):

    # 判断是否有子节点没有时直接返回
    if not node and is_child:
        return

    # 输出根节点
    if is_child ==False:
        print(node)

    # 判断节点是否有左右节点
    if node.left==None and node.right==None:
        return
    print(node.left,node.right)
    return print_tree(node.left,is_child=True),print_tree(node.right,is_child=True)

if __name__ == "__main__":
    # 定义一个二叉树[8,6,10,5,7,9,11]
    root = TreeNode(8,
                    TreeNode(6,TreeNode(5),TreeNode(7)),
                    TreeNode(10,TreeNode(9),TreeNode(11))
                    )
    print_tree(root)

  二叉树的遍历:

class TreeNode(object):
    def __init__(self,data,left_node=None,right_node=None):
        self.data = data
        self.left = left_node
        self.right = right_node

    def __str__(self):
        return str(self.data)

def preorder(node):
    if node == None:
        return
    return print(node),preorder(node.left),preorder(node.right)

def mid_order(node):
    if node == None:
        return
    return preorder(node.left),print(node),preorder(node.right)

def after_order(node):
    if node == None:
        return
    return preorder(node.left),preorder(node.right),print(node)

if __name__ == __main__:
    root = TreeNode(8,
                    TreeNode(6, TreeNode(5), TreeNode(7)),
                    TreeNode(10, TreeNode(9), TreeNode(11))
                    )
    print(前序)
    preorder(root)
    print(中序)
    mid_order(root)
    print(后序)
    after_order(root)

  二叉树的反转:

class Tree_node(object):
    def __init__(self,data,left_node=None,right_node=None):
        self.data = data
        self.left = left_node
        self.right = right_node

    def __str__(self):
        return str(self.data)

def reverse_node(node):
    if node:
        node.left,node.right = node.right,node.left
        if node.left:
            reverse_node(node.left)
        if node.right:
            reverse_node(node.right)
    return node

def print_node(node):
    if node:
        print(node.data,end= )
        print_node(node.left)
        print_node(node.right)


if __name__ == __main__:
    root = Tree_node(8,
                     Tree_node(6,Tree_node(7),Tree_node(5)),
                     Tree_node(10,Tree_node(9),Tree_node(11))
                    )

    node = reverse_node(root)
    print_node(node)

 

python中基本数据结构(四)

原文:https://www.cnblogs.com/lizhihoublog/p/12559637.html

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