【刷题之路】二叉树遍历
来源:互联网 发布:看视频软件有卡顿 编辑:程序博客网 时间:2024/06/04 01:25
由一个前序以及中序遍历重建一颗二叉树
经典二叉树题目,由前序遍历可知前序遍历的第一个数为当前树的头结点;
得知当前树的头结点后,由中序遍历可知左右子树的节点数量;
这样可以将前序遍历,去除头结点后,分为两部分,两部分的第一个数分别为左右子树的头结点;
递归实现,根据函数输入不同有不同写法,大体算法一致
/**
* 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) {
int head=pre[0];
int lenl,lenr;
int i,j;
vector<int> left_pre,left_in,right_pre,right_in;
TreeNode *node = new TreeNode(head); //新建树
for(i=0;in[i]!=head && i<in.size();i++); //在中序遍历中寻找头结点位置
lenl=i; //左子树节点数
lenr=in.size()-i-1; //右子树节点数
for(j=0;j<i;j++){ //将左子树前、中序遍历放入新vector中
left_pre.push_back(pre[j+1]); //注意此处,前序遍历要去除当前头结点
left_in.push_back(in[j]);
}
for(j=i+1;j<in.size();j++){ //将右子树前、中序遍历放入新vector中,注意两个循环
right_pre.push_back(pre[j]);
right_in.push_back(in[j]);
}
if(lenl>0) node->left=reConstructBinaryTree(left_pre,left_in); //递归建立左子树
if(lenr>0) node->right=reConstructBinaryTree(right_pre,right_in); //递归简历右子树
return node;
}
};
- 【刷题之路】二叉树遍历
- 【刷题之路】二叉树前中后序遍历(递归)
- 刷题之路----根据前序遍历和中序遍历或者后序遍历和中序遍历重建二叉树
- 【刷题之路】二叉树的前中后序遍历(非递归)
- 【刷题之路】二叉搜索树的后序遍历序列
- 数据结构之二叉树遍历
- 二叉树之层次遍历
- DS之遍历二叉树
- 二叉树遍历之递归
- 二叉树之层次遍历
- 数据结构之二叉树遍历
- 程序员面试100题(算法)之层次遍历二叉树(含二叉树前序创建、层次遍历、前序遍历)
- android复习路之二叉树层次遍历并且分层
- 每日一题之二叉树的层序遍历
- 剑指offer刷题之java实现的二叉搜索树的后序遍历序列
- 二叉树遍历之递归算法
- 编程之美:分层遍历二叉树
- 编程之美---分层遍历二叉树
- CCCC初赛 关于堆的判断
- 【NOIP2015提高组】跳石头
- android 布局优化
- Android Camera HAL V3 Vendor Tag及V1,V3参数转换
- POJ 1088 滑雪(记忆化搜索)
- 【刷题之路】二叉树遍历
- 7.【动态内存分配】
- mysql入门笔记2
- 关于android 4.4以上版本从相册选取图片加载不了图片的问题
- 使用EF框架的增删改查和分页的公共类
- Java中包含继承关系时对象的创建与销毁顺序详解(附源码)
- Android Camera API2.0下全新的Camera FW/HAL架构简述
- c/c++函数返回局部变量数组
- hdu 1698