题目:
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
思路:
前序遍历: 根左右
中序遍历:左根右
根据先序遍历就能获得根。
中序遍历依据根可以把树一分为二,根的左子树必定在其左边,右子树必定在其右边。递归进去就解决了
代码:
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
int[] pre;
int[] in;
int index = 0;
public TreeNode find(int l ,int r){
if(index >= pre.length )
return null;
TreeNode node = new TreeNode(pre[index++]);
if(l == r)
return node;
int getId = findByIn(node.val,l,r);
if(getId == -1)
return node;
if(getId > l ){
node.left = find( l,getId-1 );
}
if(getId < r ){
node.right = find(getId+1,r );
}
return node;
}
private int findByIn( int i ,int l, int r) {
for (int j = l; j <= r; j++) {
if (in[j] == i) {
return j;
}
}
return -1;
}
public TreeNode reConstructBinaryTree(int [] pre, int [] in) {
int n = pre.length;
this.pre = pre;
this.in = in;
return find(0,n-1);
}
}
继续阅读与本文标签相同的文章
-
语音顶会Interspeech 论文解读|Constrained output embeddings for end-to-end code-switching speech recognition with only monolingual data
2026-05-18栏目: 教程
-
《Android应用开发进阶》| 每日读本书
2026-05-18栏目: 教程
-
“阿里云十年,因为有我而不同”,征文活动开始了!
2026-05-18栏目: 教程
-
玩转 Drone CI
2026-05-18栏目: 教程
-
有关阿里云对SaaS行业的思考,看这一篇就够了
2026-05-18栏目: 教程
