二叉树重建
来源:互联网 发布:全国网络电视在线直播 编辑:程序博客网 时间:2024/06/10 10:08
二叉树重建是涉及到二叉树知识点中肯定会遇到的问题。前序加中序遍历,或者中序加后序遍历可以唯一地重建一棵二叉树。
如:给定前序遍历数组{1,2,4,7,3,5,6,8},中序遍历数组{4,7,2,1,5,3,8,6},然后重建一棵二叉树;
思路:在前序遍历数组中第一个数肯定是树的根root->val=1,然后根据root在中序数字的位置可以划分出左子树和右子树的中序遍历,同样又可以知道左子树和右子树的前序遍历,此时有:
左子树的前序数组pre_left={2,4,7}
左子树的中序数组vin_left={4,7,2}
右子树的前序数组pre_right={3,5,6,8}
右子树的中序数组vin_right={5,3,8,6}
这样依次递归下去,就可以得到每一个结点,代码如下:
TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) { //如果是空,则返回 if(pre.empty() || vin.empty())return NULL; //根据前中序列,构造左右子树的前中序列 vector<int>pre_left; vector<int>pre_right; vector<int>vin_left; vector<int>vin_right; //确定根结点 int value = pre[0]; TreeNode* btree = new TreeNode(value); //得出左右子树前中序列的数组 int i= 0; while(vin[i] != value){ vin_left.push_back(vin[i]); pre_left.push_back(pre[i+1]); i++; } for(int j = i+1;j<vin.size();j++){ vin_right.push_back(vin[j]); pre_right.push_back(pre[j]); } //依次递归下去 btree->left=reConstructBinaryTree(pre_left,vin_left); btree->right=reConstructBinaryTree(pre_right,vin_right); return btree; }
如果是中序加后序遍历,也是一样的,可以根据后序遍历数组得出根结点的值。
阅读全文
0 0
- 3.9重建二叉树
- 重建二叉树
- 二叉树重建
- 二叉树重建
- 二叉树的重建
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 二叉树重建
- 二叉树重建
- 重建二叉树
- 重建二叉树
- 重建二叉树
- sipp 安装
- 在python中调用自己写的方法或函数function
- 你不了解的带宽的换算
- 数据应用达人之SQL基础教程分享9-数据操作
- ThreadLocal解决SimpleDateFormat线程安全问题
- 二叉树重建
- 常用排序算法--冒泡,插入,选择,希尔,归并,快速
- Jenkins构建本地项目到服务器上自动部署的方法
- json文件 数据导入excel----->(jxl)
- Oracle批量更新
- Linux下守护进程的探究
- Git使用
- 转自百度百科,strncpy函数
- redis 单实例