python中二叉树的遍历

本文深入探讨了二叉树的遍历方法,包括递归和非递归的先序、中序和后序遍历。通过实例展示了如何构建二叉树,并分别使用递归和非递归的方式进行遍历,帮助读者理解不同遍历方式的特点和应用场景。

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

递归方法:

class treenode(object):
    def __init__(self,x):
        self.val=x
        #左子树
        self.left=None
        #右子树
        self.right=None

def pre(root):
    if root==None:
        return None
    #先序遍历
    print(root.val)
    pre(root.left)
    pre(root.right)

def pre_middle(root):
    if root==None:
        return None
    #中序遍历
    pre(root.left)
    print(root.val)
    pre(root.right)

def pre_last(root):
    if root==None:
        return None
    #后序遍历
    pre(root.left)
    pre(root.right)
    print(root.val)
     
if __name__ == '__main__':
    t1=treenode(1)
    t2 = treenode(2)
    t3 = treenode(3)
    t4 = treenode(4)
    t5 = treenode(5)
    t6 = treenode(6)
    t7 = treenode(7)
    t8 = treenode(8)

    #设置 t1 的left节点属性 是t2
    t1.left=t2
    #设置t1的right节点的属性是t3
    t1.right=t3

    #设置t2的left节点是t4
    t2.left=t4
    # 设置t2的right节点是t5
    t2.right=t5

    # 设置t3的left节点是t6
    t3.left=t6
    # 设置t3的right节点是t7
    t3.right=t7

    # 设置t6的right节点是t8
    t6.right=t8

     pre(t1)
     pre_middle(t1)
     pre_last(t1)

非递归的方法:

class treenode(object):
    def __init__(self,x):
        self.val=x
        #左子树
        self.left=None
        #右子树
        self.right=None

#非递归先序遍历
def pre_no1(root):
    if root==None:
        return None
    stack=[]
    tempNode=root
    while tempNode or stack:
        while tempNode:
            print(tempNode.val)
            stack.append(tempNode)
            tempNode=tempNode.left

        node=stack.pop()
        tempNode=node.right

#非递归中序遍历
def pre_no2(root):
    if root==None:
        return None
    stack=[]
    tempNode=root
    while tempNode or stack:
        while tempNode:
            stack.append(tempNode)
            tempNode=tempNode.left

        node=stack.pop()
        print(node.val)
        tempNode=node.right

#非递归后序遍历
def pre_no3(root):
    if root==None:
        return None
    stack=[]
    tempNode=root
    while tempNode or stack:
        while tempNode:
            stack.append(tempNode)
            tempNode=tempNode.left

        node=stack[-1]
        tempNode=node.right
        if node.right==None:
            print(node.val)
            node=stack.pop()
            while stack and  node==stack[-1].right:
                node=stack.pop()
                print(node.val)

if __name__ == '__main__':
    t1=treenode(1)
    t2 = treenode(2)
    t3 = treenode(3)
    t4 = treenode(4)
    t5 = treenode(5)
    t6 = treenode(6)
    t7 = treenode(7)
    t8 = treenode(8)

    #设置 t1 的left节点属性 是t2
    t1.left=t2
    #设置t1的right节点的属性是t3
    t1.right=t3

    #设置t2的left节点是t4
    t2.left=t4
    # 设置t2的right节点是t5
    t2.right=t5

    # 设置t3的left节点是t6
    t3.left=t6
    # 设置t3的right节点是t7
    t3.right=t7

    # 设置t6的right节点是t8
    t6.right=t8    
	
	pre_no1(t1)
    pre_no2(t1)
    pre_no3(t1)               
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值