python 二叉树的创建和遍历

本文介绍了一种使用Python实现二叉树的方法,并详细解释了如何通过递归和非递归方式创建二叉树及进行层次遍历、前序遍历、中序遍历和后序遍历。此外,还提供了详细的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#encoding=utf-8
#二叉树
import Queue
class Node(object):
    def __init__(self,value=None,lchild=None,rchild=None):
        self.value = value
        self.lchild = lchild
        self.rchild = rchild

class Tree(object):
    #创建树,用层次遍历的方式创建树,单个节点输入
    def CreatTree(self,node):
        myQueue = Queue.Queue()
        if node != None:
            myQueue.put(node)
        while myQueue.empty() is not True:
            nodes = myQueue.get()
            print nodes.value
            LVal = raw_input("输入左孩子节点值:")
            if LVal == "none":
                nodes.lchild = None
            else:
                nodes.lchild = Node(LVal)
                myQueue.put(nodes.lchild)
            RVal = raw_input("输入右孩子节点值:")
            if RVal == "none":
                nodes.rchild = None
            else:
                nodes.rchild = Node(RVal)
                myQueue.put(nodes.rchild)
        return "creat tree success"

    #创建树,递归创建
    def CreatTree1(self,root):
        a = raw_input("输入节点值:")
        if a == "none":
            root = None
        else:
            root.value = a
            root.lchild = Node()
            self.CreatTree1(root.lchild)
            root.rchild = Node()
            self.CreatTree1(root.rchild)

    #BFS-层次遍历
    def BFSTraver(self,node):
        myQueue = Queue.Queue()
        ListVal = []
        if node != None:
            myQueue.put(node)
        while myQueue.empty() is not True:
            node1 = myQueue.get()
            ListVal.append(node1.value)
            if node1.lchild != None:
                myQueue.put(node1.lchild)
            if node1.rchild != None:
                myQueue.put(node1.rchild)
        return ListVal

    #DFS-前序遍历
    def FrontTraver(self,root,NodeList=[]):
        if root!=None:
            NodeList.append(root.value)
            self.FrontTraver(root.lchild,NodeList)
            self.FrontTraver(root.rchild,NodeList)
        return NodeList

    def MiddleTraver(self,root,NodeList=[]):
        if root!=None:
            self.MiddleTraver(root.lchild,NodeList)
            NodeList.append(root.value)
            self.MiddleTraver(root.rchild,NodeList)
        return NodeList

    def LaterTraver(self,root,NodeList=[]):
        if root!=None:
            self.LaterTraver(root.lchild,NodeList)
            self.LaterTraver(root.rchild,NodeList)
            NodeList.append(root.value)
        return NodeList

if __name__ == "__main__":
    nodes = Node(1)
    t1 = Tree()
    print "************ 创建树 Start ********"
    print t1.CreatTree(nodes)
    print "************ 创建树 End **********"
    print "************ BFS Start ***********"
    print t1.BFSTraver(nodes)
    print "************ BFS End *************"
    print "************* 递归-DFS-前序 Start *********"
    print t1.FrontTraver(nodes)
    print "************* 递归-DFS-前序 End ***********"
    print "************* 递归-DFS-中序 Start **********"
    print t1.MiddleTraver(nodes)
    print "************* 递归-DFS-中序 End ************"
    print "************* 递归-DFS-后序 Start ************"
    print t1.LaterTraver(nodes)
    print "************* 递归-DFS-后序 End *************"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值