C++与java的区别,有人能帮忙看一下的吗

Sii993605709 2017-11-18 01:00:03
本人在练习leetcode里面树的遍历时,对于由前序、中序得到一课二叉树与由后序、中序得到一棵树的两个题用了java和c++两种语言,基本写法类似,但两种语言运行速度差别很大,一个5ms,另一个超时,有人可以解答一下为什么会这样吗。具体代码如下:
前序+中序得到二叉树:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public TreeNode buildTree(int[] preorder, int[] inorder) {
if(preorder ==null || inorder == null || preorder.length!= inorder.length){
return null;
}
HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
for(int i=0;i<inorder.length;i++){
map.put(inorder[i],i);
}
return buildTreePost(preorder,0,preorder.length-1,inorder,0,inorder.length-1,map);
}

public TreeNode buildTreePost(int[] preorder,int ps,int pe, int[] inorder,int is,int ie,HashMap<Integer,Integer> map){
if(ps>pe || is>ie){
return null;
}
TreeNode root = new TreeNode(preorder[ps]);
int i = map.get(root.val);
root.left = buildTreePost(preorder,ps+1,ps+i-is,inorder,is,i-1,map);
root.right = buildTreePost(preorder,ps+i-is+1,pe,inorder,i+1,ie,map);
return root;
}
}


后序+中序得到二叉树:
/**
* 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:
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
if(inorder.size()==0||postorder.size()==0||postorder.size()!=inorder.size()){
return NULL;
}
map<int,int> hashmap;
for(int i=0;i<inorder.size();i++){
hashmap[inorder[i]]=i;
}
return downTree(inorder,0,inorder.size()-1,postorder,0,postorder.size()-1,hashmap);
}

TreeNode* downTree(vector<int>& inorder,int is,int ie,vector<int>& postorder,int ps,int pe,map<int,int> hashmap){
if(pe<ps||ie<is){
return NULL;
}
TreeNode *root=new TreeNode(postorder[pe]);
int i=hashmap[postorder[pe]];
root->right=downTree(inorder,i+1,ie,postorder,ps+i-is,pe-1,hashmap);
root->left=downTree(inorder,is,i-1,postorder,ps,ps+i-is-1,hashmap);
return root;
}
};
...全文
164 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sii993605709 2017-11-19
  • 打赏
  • 举报
回复
花式求大神解答

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧