python中二叉树的遍历

递归方法:

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)               
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值