leecode更新
This commit is contained in:
parent
90237fe746
commit
8eb1d7b2ac
|
|
@ -0,0 +1,56 @@
|
||||||
|
package com.markilue.leecode.hot100.second;
|
||||||
|
|
||||||
|
import com.markilue.leecode.tree.TreeNode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @BelongsProject: Leecode
|
||||||
|
* @BelongsPackage: com.markilue.leecode.hot100.second
|
||||||
|
* @Author: marklue
|
||||||
|
* @CreateTime: 2023/4/16 11:15
|
||||||
|
* @Description: TODO 力扣105 根据前序遍历和中序遍历构造树
|
||||||
|
* @Version: 1.0
|
||||||
|
*/
|
||||||
|
public class T46_105_BuildTree {
|
||||||
|
|
||||||
|
int index = 0;
|
||||||
|
|
||||||
|
public TreeNode buildTree(int[] preorder, int[] inorder) {
|
||||||
|
|
||||||
|
return buildChild(preorder, inorder, 0, inorder.length - 1);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public TreeNode buildChild(int[] preorder, int[] inorder, int inStart, int inEnd) {
|
||||||
|
if (inStart > inEnd) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
TreeNode root = new TreeNode(preorder[index]);
|
||||||
|
index++;
|
||||||
|
int in = findIndex(inorder, inStart, inEnd, root.val);
|
||||||
|
root.left = buildChild(preorder, inorder, inStart, in - 1);
|
||||||
|
root.right = buildChild(preorder, inorder, in + 1, inEnd);
|
||||||
|
return root;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 在start和end的范围中寻找target
|
||||||
|
*
|
||||||
|
* @param inorder
|
||||||
|
* @param start
|
||||||
|
* @param end
|
||||||
|
* @param target
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public int findIndex(int[] inorder, int start, int end, int target) {
|
||||||
|
|
||||||
|
while (start < end) {
|
||||||
|
if (inorder[start] == target) {
|
||||||
|
return start;
|
||||||
|
}
|
||||||
|
start++;
|
||||||
|
}
|
||||||
|
return -1;//没找到
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue