前中序重建二叉树python实现
2017-12-06 20:48
369 查看
## 输入某二叉树的前序遍历和中序遍历的结果, # 请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 # 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}, # 则重建二叉树并返回。 # -*- 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 or pre == None : return None root = TreeNode(pre[0]) ## 获取左子树的前序遍历 child_map = self.getChildRoot(pre, tin) ## 分别获取左子树和右子树的前序遍历和中序遍历 pre_left = child_map['pre_left'] tin_left = child_map['tin_left'] ## 递归调用,获取左子树 root.left = self.reConstructBinaryTree(pre_left, tin_left) pre_right = child_map['pre_right'] tin_right = child_map['tin_right'] root.right = self.reConstructBinaryTree(pre_right, tin_right) return root ## 找到子树 def getChildRoot(self, pre, tin) : child = {} root = pre[0] pre_left = [] tin_left = [] pre_right = [] tin_right = [] ## 中序遍历是否遍历到了根 flag = False for i in tin : if i != root and flag != True: tin_left.append(i) elif i == root : flag = True continue else : tin_right.append(i) for i in pre : if i in tin_left: pre_left.append(i) elif i != root : pre_right.append(i) child['pre_left'] = pre_left child['pre_right'] = pre_right child['tin_left'] = tin_left child['tin_right'] = tin_right return child ## test pre = [1,2,4,7,3,5,6,8] tin = [4,7,2,1,5,3,8,6] s = Solution() root = s.reConstructBinaryTree(pre, tin) print(root)
牛客网的编译会有问题,只需要把中文都删除掉即可。
相关文章推荐
- Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
- 通过前序遍历和中序遍历重建二叉树以及输出后序遍历(Java实现)(二)
- 由前序遍历和中序遍历重建二叉树和C语言模式实现C++继承和多态——题集(十四)
- 二叉树的四种遍历方式 (前序,中序,后序,层序遍历 python实现)
- 二叉树的前序,中序,后续,递归及非递归遍历的python实现
- 二叉树的遍历;前序 中序 后序遍历二叉树;递归 非递归实现; 重建二叉树;编程之美重建二叉树
- 重建二叉树(C++和Python实现)
- 【面试算法系列】已知二叉树的前序和中序遍历重建二叉树 - C语言实现
- 二叉树的遍历以及重建(Python实现)
- 利用对象的思想创建二叉树并实现四种遍历(广序,先序,中序,后序)-python3版
- c/c++实现利用二叉树的先序遍历和中序遍历序列重建树
- 二叉树(前序,中序,后序,层序)遍历递归与循环的python实现
- 一直二叉树的前序遍历和中序遍历的结果,重建该二叉树 Java代码实现
- 剑指offer刷题之c++实现的根据二叉树的前序和中序遍历重建二叉树
- 根据先序和中序遍历重建二叉树java实现
- 根据前序遍历和中序遍历重建二叉树的Java实现
- 由前序遍历和中序遍历重建二叉树,再实现后续遍历
- python实现二叉树的建立以及遍历(递归前序、中序、后序遍历,队栈前序、中序、后序、层次遍历)
- python实现剑指offer系列:重建二叉树
- 通过前序遍历和中序遍历重建二叉树以及输出后序遍历(Java实现)