通过前序中序遍历非递归还原二叉树的原理是:在二叉树遍历中,前序遍历的次序是根左右,根据这个结论可以得出前序遍历中第一个结点一定是二叉树的根结点,再在中序遍历的结果中查询这个根结点,根结点左边的就是左子树,根结点右边的就是右子树,然后从前往后循环访问前序遍历,先还原结点的左子树,再还原结点的右子树,用栈数据结构保存构造左子树过程中访问过的节点,依次还原出二叉树。
通过中序后序遍历非递归还原二叉树的原理是跟上面类似,二叉树遍历中后序遍历的次序是左右根,即后序遍历中最后一个结点一定是二叉树的根结点,然后从后往前循环访问后序遍历,先还原右子树,再还原左子树,用栈保存构造右子树过程中访问过的结点,重新还原出二叉树。
例如:
前序遍历:{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