Python 非递归实现前序中序、中序后序遍历还原二叉树

本文介绍了如何使用非递归方法通过前序中序和中序后序遍历来还原二叉树。核心思想是利用遍历顺序找到根节点,然后通过栈来构造子树。具体步骤包括在前序遍历中找到根节点,中序遍历中确定左右子树;在中序后序遍历中,后序遍历的最后一个节点为根节点,然后依次还原右子树和左子树。配合示例代码进行了解和测试。
摘要由CSDN通过智能技术生成

通过前序中序遍历非递归还原二叉树的原理是:在二叉树遍历中,前序遍历的次序是根左右,根据这个结论可以得出前序遍历中第一个结点一定是二叉树的根结点,再在中序遍历的结果中查询这个根结点,根结点左边的就是左子树,根结点右边的就是右子树,然后从前往后循环访问前序遍历,先还原结点的左子树,再还原结点的右子树,用栈数据结构保存构造左子树过程中访问过的节点,依次还原出二叉树。

通过中序后序遍历非递归还原二叉树的原理是跟上面类似,二叉树遍历中后序遍历的次序是左右根,即后序遍历中最后一个结点一定是二叉树的根结点,然后从后往前循环访问后序遍历,先还原右子树,再还原左子树,用栈保存构造右子树过程中访问过的结点,重新还原出二叉树。

例如:

前序遍历:{1, 2, 4, 3, 5, 6, 7 }

中序遍历:{2, 4, 1, 5, 3, 7, 6 }

后序遍历:{4, 2, 5, 7, 6, 3, 1 }

代码如下

import queue
'''
二叉树结点
'''  
class TreeNode:
    def __init__(self,val=None,left=None,right=None):
        self.val = val
        self.left = left
        self.right = right
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值