码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 根据前序与中序遍历结果构造二叉树


    文章前言:如果不知道什么是前序与中序的小白同学,作者推荐:二叉树的初步认识_加瓦不加班的博客-CSDN博客

    思路:

    • 先通过前序遍历结果定位根节点

    • 再结合中序遍历结果切分左右子树

    1. public class E09Leetcode105 {
    2. //1. pre-order 前序遍历,对于每一棵子树,先访问该节点,然后是左子树,最后是右子树
    3. //2. in-order 中序遍历,对于每一棵子树,先访问左子树,然后是该节点,最后是右子树
    4. //3. post-order 后序遍历,对于每一棵子树,先访问左子树,然后是右子树,最后是该节点
    5. /*
    6. preOrder = {1,2,4,3,6,7}
    7. inOrder = {4,2,1,6,3,7}
    8. 1.根据前序可以得知: 根是 1
    9. 2.根据中序可以得知: 我们已经知道根节点是1 那么就能判断中序中1之前的是左子树 1后面的是右子树
    10. pre in
    11. 左 2,4 4,2
    12. 右 3,6,7 6,3,7
    13. 3.然后我们再根据前序的性质就知道顺序
    14. 根 2
    15. 左 4
    16. 根 3
    17. 左 6
    18. 右 7
    19. */
    20. //preOrder:传入的是前序遍历的数组 inOrder:传入的是中序遍历的数组
    21. public TreeNode buildTree(int[] preOrder, int[] inOrder) {
    22. if (preOrder.length == 0) {
    23. return null;
    24. }
    25. // 创建根节点
    26. int rootValue = preOrder[0];
    27. TreeNode root = new TreeNode(rootValue);
    28. // 利用中序遍历的数组区分左右子树
    29. for (int i = 0; i < inOrder.length; i++) {
    30. //在中序遍历的数组中找到根节点
    31. if (inOrder[i] == rootValue) {
    32. // 0 ~ i-1 左子树
    33. // i+1 ~ inOrder.length -1 右子树
    34. int[] inLeft = Arrays.copyOfRange(inOrder, 0, i); // [4,2]
    35. int[] inRight = Arrays.copyOfRange(inOrder, i + 1, inOrder.length); // [6,3,7]
    36. int[] preLeft = Arrays.copyOfRange(preOrder, 1, i + 1); // [2,4]
    37. int[] preRight = Arrays.copyOfRange(preOrder, i + 1, inOrder.length); // [3,6,7]
    38. root.left = buildTree(preLeft, inLeft); // 2
    39. root.right = buildTree(preRight, inRight); // 3
    40. break;
    41. }
    42. }
    43. return root;
    44. }
    45. }
    • 代码可以进一步优化,涉及新数据结构,以后实现

  • 相关阅读:
    Linux常见指令与shell理解
    【网安神器篇】——hydra爆破工具
    坚鹏:中国工商银行数字化转型发展现状与成功案例培训圆满结束
    FinalReference 如何使 GC 过程变得拖拖拉拉
    现代计算与光学的跨界机遇——
    使用T2-U和Sensor_Hub开发一款智能温湿度计
    基于Spring Boot应用Java的Stream流API
    黑盒测试-场景法
    将自己的代码发布成可以pip安装的包
    (LeetCode)全排列
  • 原文地址:https://blog.csdn.net/m0_60333804/article/details/133658403
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号