/*
* 105. Construct Binary Tree from Inorder and preorder Traversal
* 11.20 By Mingyang
* 千万不要以为root一定在中间那个点,还是要找一下中间点的位置
* p.left = construct(preorder, preStart + 1, preStart + (k - inStart),inorder, inStart, k - 1);
* p.right = construct(preorder, preStart + (k - inStart) + 1, preEnd,inorder, k + 1, inEnd);
* 难点就在于如何找到这两个起点和终点的index
*/
public TreeNode buildTree(int[] preorder, int[] inorder) {
int preEnd = preorder.length - 1;
int inEnd = inorder.length - 1;
return construct(preorder, 0, preEnd, inorder, 0, inEnd);
}
public TreeNode construct(int[] preorder, int preStart, int preEnd,int[] inorder, int inStart, int inEnd) {
if (preStart > preEnd || inStart > inEnd) {
return null;
}
int val = preorder[preStart];
TreeNode p = new TreeNode(val);
// find parent element index from inorder
int k = 0;
for (int i = 0; i < inorder.length; i++) {
if (val == inorder[i]) {
k = i;
break;
}
}
p.left = construct(preorder, preStart + 1, preStart + (k - inStart),inorder, inStart, k - 1);
p.right = construct(preorder, preStart + (k - inStart) + 1, preEnd,inorder, k + 1, inEnd);
return p;
}

最新文章

  1. UltralEdit 替换tips
  2. Socket支持多用户并发访问的解决办法
  3. 编译原理LL1文法Follow集算法实现
  4. css常用中文字体的英文名称写法
  5. xcode 出现the file couldn&#39;t be opened 怎么解决
  6. MySQL学习笔记——存储引擎的索引特性
  7. log.sh
  8. 左右推拽显示对比图 - jQyery封装 - 附源文件
  9. 域名解析 URL转发
  10. java war 打包、解压命令(转载)
  11. leetcode — best-time-to-buy-and-sell-stock
  12. 复制命令(ROBOCOPY)
  13. 模板 RMQ问题ST表实现/单调队列
  14. OO第二单元单元总结
  15. 渗透测试的理论部分4——开放式Web应用程序安全项目
  16. vue.js 树菜单 递归组件树来实现
  17. sqlserver的like &#39;%xxx%&#39;优化,全文索引
  18. RabbitMQ 可靠投递
  19. netty 的 JBoss Marshalling 编码解码
  20. js批量上传文件

热门文章

  1. Android-Emulator使用
  2. COGS 2098. Asm.Def的病毒
  3. DECLARE - 定义一个游标
  4. core 中使用 nlog
  5. 用Vue的方式实现复选框
  6. excel数据比对,查找差异
  7. 【2018 CCPC网络赛】1004 - 费马大定理&amp;数学
  8. &lt;Spring Cloud&gt;入门二 Eureka Client
  9. Python-接口自动化(十一)
  10. oracle自增序列创建