105. 从前序与中序遍历序列构造二叉树(leetcode)
https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal/
思路和106. 从中序与后序遍历序列构造二叉树相同
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode buildTree(int[] preorder, int[] inorder) {
if(preorder.length==0 || inorder.length==0)return null;
return build(preorder,inorder,0,preorder.length,0,inorder.length);
}
// 左闭右开
public TreeNode build(int[] preorder,int[] inorder,int preStart,int preEnd,int inStart,int inEnd)
{
if(preStart==preEnd)return null;
TreeNode root = new TreeNode(preorder[preStart]);
int mid;
for(mid=inStart;mid<inEnd;mid++)
if(inorder[mid]==preorder[preStart])break;
int leftInStart = inStart;
int leftInEnd = mid;
int rightInStart = mid+1;
int rightInEnd = inEnd;
int leftPreStart = preStart+1;
// leftInEnd-leftInStart 是中序左子树长度
System.out.println(leftInEnd-leftInStart);
int leftPreEnd = leftPreStart + leftInEnd - leftInStart;
int rightPreStart = leftPreEnd;
int rightPreEnd = preEnd;
root.left = build(preorder,inorder,leftPreStart,leftPreEnd,leftInStart,leftInEnd);
root.right = build(preorder,inorder,rightPreStart,rightPreEnd,rightInStart,rightInEnd);
return root;
}
}
分类:
算法 / leetcode
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本