输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5
来源:互联网 发布:怎么领取淘宝客优惠券 编辑:程序博客网 时间:2024/06/06 01:38
剑指ofeer:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
解题思路:在二叉树的先序遍历中,第一个数字总是根节点的值。二叉树的中序遍历中,左子树的元素总是在根节点左边。由此两条,便可递归重构二叉树。代码如下:
#include "stdafx.h"#include <vector>#include <stack>#include <iostream>#include <stdio.h> #include <stdlib.h> #include <vector> using namespace std; //树结点结构体 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 in_size = in.size(); if(in_size == 0)//递归回头条件 return NULL; int val = pre[0];//根节点的值就是先序遍历的第一元素 TreeNode* node = new TreeNode(val); int p = 0;//p用来记录根节点在中序遍历中的位置 for (; p < in_size; ++p){ if (in[p] == val) //Find the root position in in break; //找到即跳出for循环 } vector<int> pre_left, pre_right, in_left, in_right;// //分别存储先序序列的左子树,先序序列的右子树,中序序列的左子树,中序序列的右子树 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; };}; void Test1() { const int length = 8; int preorder[8] = { 1, 2, 4, 7, 3, 5, 6, 8 }; int inorder[8] = { 4, 7, 2, 1, 5, 3, 8, 6 }; vector<int> pre_vec(&preorder[0],&preorder[8]); vector<int> in_vec(&inorder[0],&inorder[8]);/* for(int i = 0; i < length; i++){ pre.push_back(preorder[i]);in.push_back(inorder[i]); }*/ solution s; TreeNode* node; node = s.reConstructBinaryTree(pre_vec,in_vec); int a=0; a++; } int main() { Test1(); system("pause"); return 0; }
阅读全文
0 0
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5
- java 剑指offor 第四题:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
- 输入某二叉树的前序遍历和中序遍历的结果重建出该二叉树。设输入的前序遍历和中序遍历的结果中都不含重复的数字。如输前序{1,2,4,7,3,5,6,8}和中序{4,7,2,1,5,3,8,6},则重建。
- 重建二叉树:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果请重建出该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
- 重建二叉树,输入某二叉树的前序遍历和中序遍历的结果,重建出二叉树,假设输入的前序和中序遍历结果中不含重复的数字
- 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。
- 欢迎使用CSDN-markdown编辑器
- CopyOnWriteArrayList<E>
- 基于OpenCV批量处理文件夹中的图片的方法
- jquery入门
- 一个屌丝程序猿的人生(十五)
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5
- php微信域名检测实例
- java集合框架之Set和Map之间的关系
- COCOS2D学习第一天
- JavaScript
- 老电力猫
- <context-param>与<init-param>的区别与作用
- 线段树之简单方法
- 【机房重构】视图