剑指Offer4:重建二叉树
2020-01-13 18:49
94 查看
剑指Offer4.重建二叉树
1.题目
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
2.基础知识
- 前序遍历:先访问根结点,再访问左子结点,最后访问右子结点。
- 中序遍历:先访问左子结点,再访问根结点,最后访问右子结点。
- 后序遍历:先访问左子结点,再访问右子结点,最后访问根结点。
3.思路
中心还是使用递归思想,前序遍历序列中,第一个数字总是树的根结点的值。在中序遍历序列中,根结点的值在序列的中间,左子树的结点的值位于根结点的值的左边,而右子树的结点的值位于根结点的值的右边。
4.代码
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) { if(pre.size() == 0){ return NULL; } vector<int> left_pre, right_pre, left_vin, right_vin; TreeNode* head = new TreeNode(pre[0]); int root = 0; for(int i = 0; i < pre.size(); i++){ if(vin[i] == pre[0]){ root = i; break; } } for(int i = 0; i < root; i++){ left_vin.push_back(vin[i]); left_pre.push_back(pre[i+1]); } for(int i = root+1; i < pre.size(); i++){ right_vin.push_back(vin[i]); right_pre.push_back(pre[i]); } head->left = reConstructBinaryTree(left_pre,left_vin); head->right = reConstructBinaryTree(right_pre,right_vin); return head; } };
# -*- 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): if len(pre) == 0: return None elif len(pre) == 1: return TreeNode(pre[0]) else: a = TreeNode(pre[0]) b = tin.index(pre[0]) a.left = self.reConstructBinaryTree(pre[1:b+1], tin[:b]) a.right = self.reConstructBinaryTree(pre[b+1:], tin[b+1:]) return a
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 重建二叉树-牛客剑指offer4
- 剑指offer4 重建二叉树
- java 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
- 剑指offer 面试题6:重建二叉树(Leetcode105. Construct Binary Tree from Preorder and Inorder Traversal) 解题报告
- 中序后序重建二叉树
- 剑指Offer学习总结-重建二叉树
- 面试题6:重建二叉树(根据前序和中序)
- 重建二叉树
- 重建二叉树
- 面试题03 - 重建二叉树 【树】[ 一定要记住 ]
- 面试题06_重建二叉树——剑指offer系列
- 根据前序和中序的遍历序列重建二叉树
- 重建二叉树
- 二叉树重建(Tree Recovery ,UVa536)
- 如何根据前序遍历和中序遍历重建二叉树
- 2. 重建二叉树
- 重建二叉树
- 【每日一题-16】重建二叉树&C模拟实现C++继承多态
- 重建二叉树
- 编程之美:第三章 结构之法 3.9重建二叉树