重建二叉树
来源:互联网 发布:linux如何查看历史命令 编辑:程序博客网 时间:2024/06/06 08:38
题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
思路:根节点肯定是前序遍历的第一个数,找到中序遍历根节点所在位置,对于中序遍历,根节点左边的节点位于二叉树的左边,根节点右边的节点位于二叉树的右边,利用上述这点,对二叉树节点进行归并,和shell排序的思想类似,取出前序和中序遍历根节点左边和右边的子树递归,再对其进行上述所有步骤,即再区分子树的左、右子子数,直到叶节点。
C/C++代码:
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution{public: struct TreeNode *reConstructBinaryTree(vector<int> pre, vector<int> in) { vector<int> pre_left, pre_right, in_left, in_right; int in_size = in.size(); if(0 == in_size) { return NULL; } int val = pre[0]; TreeNode *node = new TreeNode(val); int p; for(p = 0; p < in_size; p++) { if(in[p] == val) { break; } } for(int i = 0; i < in_size; i++) { if(i < p) { in_left.push_back(in[i]); pre_left.push_back(pre[i + 1]); } else if(i > p) { in_right.push_back(in[i]); pre_right.push_back(pre[i]); } } node -> left = reConstructBinaryTree(pre_left, in_left); node -> right = reConstructBinaryTree(pre_right, in_right); return node; }};
0 0
- 3.9重建二叉树
- 重建二叉树
- 二叉树重建
- 二叉树重建
- 二叉树的重建
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 二叉树重建
- 二叉树重建
- 重建二叉树
- 重建二叉树
- 重建二叉树
- SVN代码上传到服务器时要注意的问题
- 第12周-显示一个棋盘
- jbytearray转c++byte数组
- [2015/11/17] -C#- 服务器调试 SocketException 使用了与请求的协议不兼容的地址
- SVN代码上传到服务器时要注意的问题
- 重建二叉树
- Android中Bitmap图片压缩
- 适婚小伙月入6000元,如何攒足购房金
- HDU 5525:Product 欧拉定理
- linux 命令行
- win7如何设置SATA硬盘
- 分块查找
- python向数据库插入中文乱码问题
- cocosPods 遇到的问题