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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数据挖掘之时间序列分析[通俗易懂]

    数据挖掘之时间序列分析[通俗易懂]按时间顺序排列的一组随机变量X1,X2,…,Xt表示一个随机事件的时间序列。时间序列分析的目的是给定一个已被观测了的时间序列,预测该序列的未来值。表1常用的时间序列模型 模型名称 描述 平滑法 常用于趋势分析和预测,利用修匀技术,削弱短期随机波动对序列的影响,使序列平滑化。 根据所用平滑技术的不同,可分为移动平均法和指数平滑法。 趋势拟合法…

    2022年6月22日
    30
  • 腾讯课堂视频下载_电脑腾讯会议不支持虚拟背景

    腾讯课堂视频下载_电脑腾讯会议不支持虚拟背景如果想把腾讯课堂里的视频下载到本地,这里提供一个方法。原理就是通过提取网页中的视频链接,进行下载。提取网页中的视频链接方法有很多。这里介绍通过浏览器插件的方式。1.我是在firefox附加组件里搜索“视频下载”找到的一款插件。flashvideodownloader,安装即可2.打开腾讯课堂网页版,播放想要下载的视频。浏览器会缓存你播放的视频,一般是5分钟一个。3.打开浏览器插件,它就会显示…

    2025年8月15日
    4
  • Java的常用输入输出语句

    Java的常用输入输出语句一、概述  输入输出可以说是计算机的基本功能。作为一种语言体系,java中主要按照流(stream)的模式来实现。其中数据的流向是按照计算机的方向确定的,流入计算机的数据流叫做输入流(inputStream),由计算机发出的数据流叫做输出流(outputStream)。Java语言体系中,对数据流的主要操作都封装在java.io包中,通过java.io包中的类可以实现计算机对数据的输入、输出操作…

    2022年5月26日
    39
  • python merge函数[通俗易懂]

    python merge函数[通俗易懂]本篇详细说明merge的应用,join和concatenate的拼接方法的与之相似。pd.merge(left,right,how=’inner’,on=None,left_on=None,right_on=None,left_index=False,right_index=False,sort=True,suffixes=(‘_x’,’_y’),copy=True,indicator=False,validate=No

    2022年5月2日
    76
  • 关于深层次NAT在TUXEDO中配置的疑问

    关于深层次NAT在TUXEDO中配置的疑问

    2021年7月28日
    58
  • loadrunner压力测试学习笔记

    loadrunner压力测试学习笔记loadrunner学习过程以下仅记录自己的学习过程,有不对之处欢迎指出。压力测试步骤:1.分析需求2.准备脚本3.调试脚本2.准备脚本:可以录制也可以自己写,录制的话先按需求分好每一个action,录制时先切换到当前action,再进行录制。例如:创建一个新的脚本,在action里添加新的action,open_index,submit_login,sign_off(loadrunner自带案例的登录过程)3.调试脚本:(1)回放:脚本准备好后进行回放,需要参数的提前准备好参数,比如注册

    2022年7月18日
    15

发表回复

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

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