106. Construct Binary Tree from Inorder and Postorder Traversal「建议收藏」

106. Construct Binary Tree from Inorder and Postorder Traversal「建议收藏」106. Construct Binary Tree from Inorder and Postorder Traversal

大家好,又见面了,我是你们的朋友全栈君。

Given inorder and postorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
For example, given

inorder = [9,3,15,20,7]
postorder = [9,15,7,20,3]
Return the following binary tree:

    3
   / \
  9  20
    /  \
   15   7

难度:medium

题目:给定二叉树中序及后序遍历,构造二叉树,注意二叉树中的结点不重复。

思路;分治。

  1. 从后序遍历数组中由后向前取结点r
  2. 在中序遍历中找到r的位置,并由此结点分成两部分,继续执行1.

Runtime: 4 ms, faster than 68.02% of Java online submissions for Construct Binary Tree from Inorder and Postorder Traversal.
Memory Usage: 37.6 MB, less than 42.45% of Java online submissions for Construct Binary Tree from Inorder and Postorder Traversal.

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public TreeNode buildTree(int[] inorder, int[] postorder) {
        if (null == postorder || postorder.length < 1) {
            return null;
        }
        
        return buildTree(inorder, 0, inorder.length - 1, postorder, postorder.length - 1);
    }
    
    public TreeNode buildTree(int[] inorder, int start, int end, int[] postorder, int idx) {
        if (start > end || idx < 0) {
            return null;
        }   
        
        TreeNode root = new TreeNode(postorder[idx]);
        int rIdx = start;
        for (; rIdx <= end; rIdx++) {
            if (inorder[rIdx] == postorder[idx]) {
                break;
            }
        }
        
        root.left = buildTree(inorder, start, rIdx - 1, postorder, idx - (end - rIdx) - 1);
        root.right = buildTree(inorder, rIdx + 1, end, postorder, idx - 1);
        
        return root;
    }
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106985.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月21日 下午4:40
下一篇 2022年4月21日 下午5:00


相关推荐

  • ROS移动机器人基于RRT(快速探索随机树)算法 rrt_exploration实现真实机器人自主探索建图

    ROS移动机器人基于RRT(快速探索随机树)算法 rrt_exploration实现真实机器人自主探索建图仿真机器人加真实机器人功能包下载链接 https download csdn net download 博主为了图方便 就直接使用了古月老师的仿真包了 博主先和自己的朋友先在真实的机器人上实现了这个功能 再在仿真上来实现了一下 也可以先去 zhangrelay 老师的博客看看关于 rrt 的资料 这里继续更新这里先展示 rrt 建图的过程 下面

    2026年3月20日
    2
  • CentOS7安装nginx-1.20.1

    CentOS7安装nginx-1.20.11.安装依赖yum-yinstallgccpcrepcre-develzlibzlib-developensslopenssl-develgcclinux编译器pcre是一个perl库,包括perl兼容的正则表达式库,nginx的http模块使用pcre来解析正则表达式zlib库提供了很多种压缩和解压缩方式nginx使用zlib对http包的内容进行gzipopenssl是web安全通信的基石,也就是https相关的依赖如下图,不存在的依赖会自动安装,已存在的依赖会被

    2022年6月3日
    105
  • ManualResetEvent类的用法

    ManualResetEvent类的用法ManualResetEvent类作用1.事件初始状态设为false,task线程在第一个WaitOne()处阻塞。2.manualResetEvent.Set()事件状态设为true,task线程在每一个WaitOne()处都不阻塞。3.manualResetEvent调用Set()再调用Reset(),task线程在第一个WaitOne()处阻塞。4.manualResetEvent.Set()事件状态设为true,task线程在第一个WaitOne()处阻塞然后被释放。5.三个线程异步执行,set()

    2022年7月18日
    24
  • Intellij IDEA 2021 Maven 配置指南「建议收藏」

    Intellij IDEA 2021 Maven 配置指南「建议收藏」Maven是Java一个不错的项目管理工具,但在IntellijIDEA软件中配置它却并非一件省心的事情,不少小萌新会配置失败。所以,我打算分享这篇教程,帮助萌新们在IntellijIDEA中配置好Maven~

    2022年5月28日
    180
  • 计算机复试面试题总结「建议收藏」

    计算机复试面试题总结「建议收藏」面试问题之编程语言1。C++的特点是什么?封装,继承,多态。支持面向对象和面向过程的开发。2.C++的异常处理机制?抛出异常和捕捉异常进行处理。(实际开发)3.c和c++,java的区别?c是纯过程,c++是对象加过程,java是纯面向对象的4.纯虚函数?被virtual修饰的成员函数,再基类不能实现,而他的实现放到派生类中实现。5.什么是内存泄漏?没有de…

    2022年6月4日
    46
  • 为Linux-Centos用户添加sudu权限

    为Linux-Centos用户添加sudu权限1 su 到 root 用户 并进入 etc 目录 roy localhostetc su Password root localhost root localhost cd etc root localhostetc llsudo rw r 1rootroot178 18sudo conf rr

    2026年3月18日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号