博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【原创】leetCodeOj ---Construct Binary Tree from Preorder and Inorder Traversal 解题报告
阅读量:5226 次
发布时间:2019-06-14

本文共 1556 字,大约阅读时间需要 5 分钟。

原题地址:

 

题目内容:

Given preorder and inorder traversal of a tree, construct the binary tree.

Note:

You may assume that duplicates do not exist in the tree.

 

方法:

非常单纯的递归应用。当然首先你需要知道什么叫前序遍历,什么叫中序遍历。我们可以通过前序和中序遍历来构造一棵树,这个过程是递归的。

首先,我们拿到了两个序列。

其次,我们根据前序遍历序列,获得了树根,new一个树根。

然后,我们找到树根在中序遍历的位置,然后就知道左右子树的范围了。

最后,递归处理左右子树

 

PS:利用后序遍历和中序遍历来构造一棵树也是一样道理,关键有两点,一是找根,而是确定子树范围。

 

全部代码:

/** * Definition for binary tree * 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.length == 0)            return null;        return trueStuff(preorder,0,preorder.length - 1,inorder,0,inorder.length - 1);    }    private TreeNode trueStuff(int[] pre,int startp,int finp,int[] in,int starti,int fini)    {        if (startp == finp)            return new TreeNode(pre[startp]);        if (startp > finp)            return null;        TreeNode tmp = new TreeNode(pre[startp]);        int pos = findIndex(in,starti,fini,pre[startp]);        if (pos == -1)            return null;        tmp.left = trueStuff(pre,startp + 1,startp + pos - starti,in,starti,pos - 1);        tmp.right = trueStuff(pre,startp + pos - starti + 1,finp,in,pos + 1,fini);         return tmp;    }    private int findIndex(int[] in,int start,int fin,int target)    {        for (int i = start;i <= fin;i++)            if (in[i] == target)                return i;        return -1;    }}

 

转载于:https://www.cnblogs.com/shadowmydx/p/4100868.html

你可能感兴趣的文章
重要经验五:block作为属性的注意事项
查看>>
[单调队列] hdu 3415 Max Sum of Max-K-sub-sequence
查看>>
Machine Learning - XV. Anomaly Detection异常检測 (Week 9)
查看>>
iOS8学习笔记2--autolayout
查看>>
Vue计算属性和方法的区别
查看>>
angular4.0中form表单双向数据绑定正确姿势
查看>>
2017-5-30引用类型之Aray数组
查看>>
二分--POJ-3258
查看>>
PMP:2.项目运行环境
查看>>
[译]Javascript中的循环
查看>>
一名运营应该具备的基本能力
查看>>
ASP.NET MVC 过滤器(五)
查看>>
设计模式 - 装饰者模式(Decorator Pattern) Java的IO类 用法
查看>>
如何定义AIDL跨进程间通信
查看>>
Android异步操作总结
查看>>
nginx源代码分析--配置文件解析
查看>>
asp.net core系列 65 正反案例介绍SOLID原则
查看>>
QQ浏览器兼容模式下Cookie失效 导致的NetCore Cookie认证失效
查看>>
WPF Template模版之寻找失落的控件【三】
查看>>
Directx11学习笔记【十二】 画一个旋转的彩色立方体
查看>>