网络营销的方式有哪些?举例说明搜索引擎优化指的是
输入一棵二叉树前序遍历和中序遍历的结果,请重建该二叉树。
注意:
- 二叉树中每个节点的值都互不相同;
- 输入的前序遍历和中序遍历一定合法;
数据范围
树中节点数量范围 [0,100]
。
样例
给定:
前序遍历是:[3, 9, 20, 15, 7]
中序遍历是:[9, 3, 15, 20, 7]返回:[3, 9, 20, null, null, 15, 7, null, null, null, null]
返回的二叉树如下所示:3/ \9 20/ \15 7
代码:
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:unordered_map<int,int> pos; //用hash表记录每个点在中序遍历的位置vector<int> _preorder,_inorder; //动态数组存储前序遍历和中序遍历,用于创建树TreeNode* build(int a,int b,int x,int y) //创建数{if(a>b) return NULL; //区间为空的时候auto root=new TreeNode(_preorder[a]); //创建根节点int k=pos[root->val]; //子树根节点在中序遍历序列的位置// int k=-1,i=0;// while(_inorder[i]!=root->val){// i++;// }// k=i;root->left=build(a+1,k-1-x+a+1,x,k-1); root->right=build(k-1-x+a+1+1,b,k+1,y);return root; //返回根节点}TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {_preorder=preorder,_inorder=inorder;int n=inorder.size();for(int i=0;i<n;i++) pos[_inorder[i]]=i;return build(0,n-1,0,n-1); //返回递归结果}
};