当前位置: 首页 > news >正文

长沙营销型网站制作互联网公司排行

长沙营销型网站制作,互联网公司排行,网页制作与网站建设问答题,南京市招办南京网站设计文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析#xff1a;首先我们要知道后序遍历数组的最后一个元素必然是根节点#xff0c;然后根据根节点在中序遍历数组中的… 文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析首先我们要知道后序遍历数组的最后一个元素必然是根节点然后根据根节点在中序遍历数组中的位置进行划分得到根节点的左右子树遍历数组以此递归。当然这里有一个前提遍历数组的元素不得重复否则构造的二叉树不唯一。因此我们根据根节点的值找到中序遍历数组中的根节点索引以此划分出左右区间然后进行递归。   程序如下 class Solution { public:TreeNode* traversal(const vectorint inorder, int inorderBegin, int inorderEnd, const vectorint postorder, int postorderBegin, int postorderEnd) { // 1、判断是否为空数组直接返回if (inorderBegin inorderEnd || postorderBegin postorderEnd) return NULL;// 2、后序遍历数组最后一个元素就是当前的中间节点int rootValue postorder[postorderEnd - 1]; TreeNode* root new TreeNode(rootValue);// 3、叶子节点后序数组只剩下一个元素树构造完毕返回if (postorderBegin - postorderEnd 1) return root;// 4、找切割点int delimiterIndex;for (delimiterIndex inorderBegin; delimiterIndex inorderEnd; delimiterIndex) {if (inorder[delimiterIndex] rootValue) break; // 这里注意二叉树遍历数组的值不能重复否则二叉树不唯一这里默认是唯一二叉树值不重复。}// 5、切割中序数组得到 中序左数组和中序右数组int leftinorderBegin inorderBegin;int leftinorderEnd delimiterIndex;int rightinorderBegin delimiterIndex 1;int rightinorderEnd inorder.size();// 6、切割后序数组得到 后序左数组和后序右数组int leftpostorderBegin postorderBegin;int leftpostorderEnd postorderBegin delimiterIndex - inorderBegin;// 右后序区间左闭右开[rightPostorderBegin, rightPostorderEnd)int rightPostorderBegin postorderBegin (delimiterIndex - inorderBegin);int rightPostorderEnd postorderEnd - 1; // 排除最后一个元素已经作为节点了// 7、递归root-left traversal(inorder, leftinorderBegin, leftinorderEnd, postorder, leftpostorderBegin, leftpostorderEnd);root-right traversal(inorder, rightinorderBegin, rightinorderEnd, postorder, rightPostorderBegin, rightPostorderEnd);return root;}TreeNode* buildTree(vectorint inorder, vectorint postorder) { return traversal(inorder, 0, inorder.size(), postorder, 0, postorder.size());} };三、完整代码 # include iostream # include vector # include queue # include string # include algorithm # include stack using namespace std;// 树节点定义 struct TreeNode {int val;TreeNode* left;TreeNode* right;TreeNode() : val(0), left(nullptr), right(nullptr) {}TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}TreeNode(int x, TreeNode* left, TreeNode* right) : val(x), left(left), right(right) {} };class Solution { public:TreeNode* traversal(const vectorint inorder, int inorderBegin, int inorderEnd, const vectorint postorder, int postorderBegin, int postorderEnd) { // 1、判断是否为空数组直接返回if (inorderBegin inorderEnd || postorderBegin postorderEnd) return NULL;// 2、后序遍历数组最后一个元素就是当前的中间节点int rootValue postorder[postorderEnd - 1]; TreeNode* root new TreeNode(rootValue);// 3、叶子节点后序数组只剩下一个元素树构造完毕返回if (postorderBegin - postorderEnd 1) return root;// 4、找切割点int delimiterIndex;for (delimiterIndex inorderBegin; delimiterIndex inorderEnd; delimiterIndex) {if (inorder[delimiterIndex] rootValue) break; // 这里注意二叉树遍历数组的值不能重复否则二叉树不唯一这里默认是唯一二叉树值不重复。}// 5、切割中序数组得到 中序左数组和中序右数组int leftinorderBegin inorderBegin;int leftinorderEnd delimiterIndex;int rightinorderBegin delimiterIndex 1;int rightinorderEnd inorder.size();// 6、切割后序数组得到 后序左数组和后序右数组int leftpostorderBegin postorderBegin;int leftpostorderEnd postorderBegin delimiterIndex - inorderBegin;// 右后序区间左闭右开[rightPostorderBegin, rightPostorderEnd)int rightPostorderBegin postorderBegin (delimiterIndex - inorderBegin);int rightPostorderEnd postorderEnd - 1; // 排除最后一个元素已经作为节点了// 7、递归root-left traversal(inorder, leftinorderBegin, leftinorderEnd, postorder, leftpostorderBegin, leftpostorderEnd);root-right traversal(inorder, rightinorderBegin, rightinorderEnd, postorder, rightPostorderBegin, rightPostorderEnd);return root;}TreeNode* buildTree(vectorint inorder, vectorint postorder) { return traversal(inorder, 0, inorder.size(), postorder, 0, postorder.size());} };templateclass T1, class T2 void my_print2(T1 v, const string str) {cout str endl;for (class T1::iterator vit v.begin(); vit v.end(); vit) {for (class T2::iterator it (*vit).begin(); it (*vit).end(); it) {cout *it ;}cout endl;} }// 层序遍历 vectorvectorint levelOrder(TreeNode* root) {queueTreeNode* que;if (root ! NULL) que.push(root);vectorvectorint result;while (!que.empty()) {int size que.size(); // size必须固定, que.size()是不断变化的vectorint vec;for (int i 0; i size; i) {TreeNode* node que.front();que.pop();vec.push_back(node-val);if (node-left) que.push(node-left);if (node-right) que.push(node-right);}result.push_back(vec);}return result; }int main() {//vectorint inorder {9, 3, 15, 20, 7};//vectorint postorder { 9, 15, 7, 20, 3 };vectorint inorder { 1, 2, 3};vectorint postorder { 3, 2, 1};Solution s;TreeNode* root s.buildTree(inorder, postorder);vectorvectorint tree levelOrder(root);my_print2vectorvectorint, vectorint(tree, 目标树:);system(pause);return 0; }end
http://www.huolong8.cn/news/112785/

相关文章:

  • 软件开发网站开发中国有多少个网站
  • 品牌建设网站有哪些做网站的是不是程序员
  • 做视频怎样传到网站做网站卖大闸蟹
  • 企业网站开发开题报告上海关键词优化按天计费
  • 网页制作模板的网站云优化网站建设
  • 遵义网站建设哪家好淘宝客做网站推广赚钱吗
  • 外贸建站服务推广公司做商品网站
  • 网站建设课程 谷建门户网站含义
  • 各种wordpress图片相册插件比较找一个网站做优化分析
  • 江门网站自助建站成都程序员培训机构
  • 看案例网站备案 网站名称什么用
  • wordpress轻应用主机wordpress用哪个seo
  • seo网站怎么优化网站建设商业计划书
  • 用asp做的网站有哪些电子商务网站中最基本的系统是
  • 北京市住房建设投资建设网站国外网站众筹怎做
  • 行业协会网站建设wordpress在后台文章自定义表单
  • 网站制作公司咨询工作内容旅游景点网站设计论文
  • 上海网站建设最好的公司旅游网站哪家好又便宜
  • 商丘哪里有网站建设张家港个人网站制作
  • wordpress开发网站模板php做的网站怎么发布
  • 手机网站策划昆山网站推广
  • 网站设计 网站开发 优化网站维护工作内容有什么
  • 色一把做最好的网站温州网站优化价格
  • 筑龙网app下载兰州快速seo整站优化招商
  • 网站建设包含项目著名营销策划公司
  • 怎么做刷业务网站花瓣是模仿哪个网站
  • 叫外包公司做网站不肯给源代码的北京高级网站开发
  • 技能培训班广州seo推广营销
  • 普洱市住房和城乡建设局信息公开网站wordpress获取指定目录的文章
  • 网站建设主机耗电量后台管理系统界面