python实现二叉树

        二叉树是一种重要的数据结构,它由节点组成,每个节点包含一个值以及最多两个指向其子节点的链接(称为左子节点和右子节点)。遍历二叉树意味着按照一定的顺序访问树中的每个节点,并且每个节点仅被访问一次。对于二叉树,有三种常见的遍历方式:先序遍历、中序遍历和后序遍历。

一、首先定义二叉树的结点

class Node:
    def __init__(self,data):
        self.data=data
        self.leftchild=None
        self.rightchild=None

二、初始化二叉树

class tree:
    def __init__(self):
        self.root=Node(None)
    def isempty(self):
        if self.root.data==None:
            return True
        else:
            return False

三、构建二叉树(先根序)

    #构建二叉树
    def build_tree(self,node):
        data=input('>')
        if data=='0':
            return 
        node.data=data
        node.leftchild=Node(None)
        node.rightchild=Node(None)
        self.build_tree(node.leftchild)
        self.build_tree(node.rightchild)

通过输入0代表空结点,根据先根序的方法构建二叉树

四、输出二叉树里的内容

先序遍历:先遍历根节点,然后遍历左子树和右子树,在遍历左右子树的过程中同样按照先根,后左子树再右子树的方法

例如:

        1

     /      \

   2         3

 /   \

4     5

按照先序遍历结果为:1 2 4 5 3

    #二叉树的先序遍历
    def print_front(self,node):
        if node.data==None:
            print('#',end=' ')
            return 
        print(node.data,end=' ') 
        self.print_front(node.leftchild)
        self.print_front(node.rightchild)

中序遍历:现遍历左子树再遍历根节点再遍历右子树

同样的上面的树按照中序遍历的结果为:4 2 5 1 3

    #二叉树的中序遍历
    def print_middle(self,node):
        if node.data==None:
            print('#',end=' ')
            return 
        self.print_middle(node.leftchild)
        print(node.data,end=' ')         
        self.print_middle(node.rightchild)

后序遍历:先遍历左子树和右子树再遍历跟结点

按照后序遍历的结果为:4 5 2 3 1

    #二叉树的后序遍历
    def print_end(self,node):
        if node.data==None:
            print('#',end=' ')
            return 
        self.print_end(node.leftchild)
        self.print_end(node.rightchild)
        print(node.data,end=' ')    

以下是完整代码

class Node:
    def __init__(self,data):
        self.data=data
        self.leftchild=None
        self.rightchild=None
class tree:
    def __init__(self):
        self.root=Node(None)
    def isempty(self):
        if self.root.data==None:
            return True
        else:
            return False
    #构建二叉树
    def build_tree(self,node):
        data=input('>')
        if data=='0':
            return 
        node.data=data
        node.leftchild=Node(None)
        node.rightchild=Node(None)
        self.build_tree(node.leftchild)
        self.build_tree(node.rightchild)
    #二叉树的先序遍历
    def print_front(self,node):
        if node.data==None:
            print('#',end=' ')
            return 
        print(node.data,end=' ') 
        self.print_front(node.leftchild)
        self.print_front(node.rightchild)
    #二叉树的中序遍历
    def print_middle(self,node):
        if node.data==None:
            print('#',end=' ')
            return 
        self.print_middle(node.leftchild)
        print(node.data,end=' ')         
        self.print_middle(node.rightchild)
    #二叉树的后序遍历
    def print_end(self,node):
        if node.data==None:
            print('#',end=' ')
            return 
        self.print_end(node.leftchild)
        self.print_end(node.rightchild)
        print(node.data,end=' ')         
if __name__=='__main__':
    a=tree()
    a.build_tree(a.root)
    print('先序遍历>',end=' ')
    a.print_front(a.root)
    print()
    print('中序遍历>',end=' ')
    a.print_middle(a.root)
    print()
    print('后序遍历>',end=' ')
    a.print_end(a.root)

用以下的二叉树为例

最终运行结果为

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值