recursion programming
1 public class Solution { 2 public TreeNode buildTree(int[] preorder, int[] inorder) { 3 // IMPORTANT: Please reset any member data you declared, as 4 // the same Solution instance will be reused for each test case. 5 if(preorder == null) 6 return null; 7 return buildTree(preorder, inorder, 0, preorder.length, 0, inorder.length); 8 } 9 10 private TreeNode buildTree(int[] preorder, int[] inorder, int preorderStart, int preorderEnd, int inorderStart, int inorderEnd) 11 { 12 if(preorderStart >= preorderEnd) 13 return null; 14 TreeNode tmp = new TreeNode(preorder[preorderStart]); 15 if(preorderEnd - preorderStart == 1) 16 return tmp; 17 int newinorderStart = inorderStart; 18 19 while(inorder[newinorderStart] != preorder[preorderStart]) 20 { 21 newinorderStart++; 22 } 23 24 int newpreorderStart = preorderStart + 1; 25 int newpreorderEnd = newpreorderStart + (newinorderStart - inorderStart); 26 tmp.left = buildTree(preorder, inorder, newpreorderStart, newpreorderEnd, inorderStart, newinorderStart); 27 tmp.right = buildTree(preorder, inorder, newpreorderEnd, preorderEnd, newinorderStart+1, inorderEnd); 28 return tmp; 29 } 30 }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步