重建二叉树
来源:互联网 发布:java wait 当前线程 编辑:程序博客网 时间:2024/06/01 17:43
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
笔记:
先序遍历第一个位置肯定是根节点node,
中序遍历的根节点位置在中间p,在p左边的肯定是node的左子树的中序数组,p右边的肯定是node的右子树的中序数组
另一方面,先序遍历的第二个位置到p,也是node左子树的先序子数组,剩下p右边的就是node的右子树的先序子数组
把四个数组找出来,分左右递归调用即可
/** * 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) {int len = vin.size(); if(len == 0) return nullptr; TreeNode * root = new TreeNode(pre[0]); vector<int> pre_left,pre_right,vin_left,vin_right; int i =0; for( i ;i<len;i++) if(vin[i]== pre[0]) break; for(int j =0;j<len;j++){ if(j<i){ pre_left.push_back(pre[j+1]); vin_left.push_back(vin[j]); } if(j>i){ pre_right.push_back(pre[j]); vin_right.push_back(vin[j]); } } root->left = reConstructBinaryTree(pre_left,vin_left); root->right = reConstructBinaryTree(pre_right,vin_right); return root; } };
阅读全文
0 0
- 3.9重建二叉树
- 重建二叉树
- 二叉树重建
- 二叉树重建
- 二叉树的重建
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 二叉树重建
- 二叉树重建
- 重建二叉树
- 重建二叉树
- 重建二叉树
- Java 的三大特性
- 思科设备DHCP服务配置
- 慢慢适配Xcode8.0+
- JSP简介和会话技术
- 如何获取OSX中的Postscript name
- 重建二叉树
- 2017年12月15日 第三十七天次总结
- 如何用xmanager启动Linux上的图形界面程序
- 在win10,Anacoda3.5下使用conda安装scrapy
- java编程思想中的设计模式
- 如何通过API调用来分析恶意软件
- 实时适配iOS真的很难吗?
- Python3爬取网络数据
- 如何使用Xftp连接Centos服务器?