输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5
2017-06-25 20:34
627 查看
剑指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 4000 ){ 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; }
相关文章推荐
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{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,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
- 重建二叉树,输入某二叉树的前序遍历和中序遍历的结果,重建出二叉树,假设输入的前序和中序遍历结果中不含重复的数字
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
- 重建二叉树:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
- 面试题6:重建二叉树,输入某二叉树的前序遍历和中序遍历的结果,重建出该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,重建此二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,重建该二叉树
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
- 《剑指Offer》 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,重建出该二叉树
- 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树
- 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
- java 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。