二叉树遍历分为3中
前序遍历
顺序 根节点->左节点->右节点
下列该图的前序顺序:ABCDEFGH
中序遍历
顺序 左节点->根节点->右节点
中序顺序:CBEDAGFH
后序遍历
顺序 左节点->右节点->根节点
后续:CEDBGHFA
重构二叉树 必须知道两个遍历顺序且两个遍历顺序中必须有一个中序遍历
假设 已知中序和后序重构二叉树
中序顺序:mid=CBEDAGFH
后序顺序: last=CEDBGHFA
1.由后序顺序可以知道根节点是A
root = last[len(last)-1]
2.知道根节点后可以根据中序遍历获得以A为根节点的左右子树的分支
tin_root_index = mid.index(root)
3.左子树,右子树
左子树: left = [:tin_root_index+1]
右子树 : right =[tin_root_index+1:]
4.然后根据左右子树获得相应的中序和后序
左子树中序: left_mid = mid[:tin_root_index+1]
左子树后序: left_last = last[:tin_root_index]
右子树中序:right_mid = mid[tin_root_index+1:]
右子树后序:right_last = last[tin_root_index+1:root]
5.再将左子树的中后序放入左子树中,右子树的中后序放入右子树中,以此类推
下图是已知前序和中序重构的二叉树
#二叉树遍历
# -*- coding:utf-8 -*-
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
# 返回构造的TreeNode根节点
def reConstructBinaryTree(self, pre, tin):
# write code here
if len(pre) == 0:
return None
if len(pre) == 1:
return pre[0]
root = TreeNode(pre[0])
i = tin.index(root.val)
root.left = reConstructBinaryTree(pre[1:i+1],tin[:i])
root.right = reConstructBinaryTree(pre[i+1:],tin[i+1:])
return root
本文介绍二叉树的前序、中序和后序遍历方法,并详细讲解了如何利用中序和后序遍历序列重构二叉树的过程。通过实例演示,帮助读者理解二叉树遍历及重构的具体实现。
438

被折叠的 条评论
为什么被折叠?



