一、题目内容

image.png

二、题解

解法1:

思路

image.png

代码

  1. class Solution {
  2. public TreeNode buildTree(int[] preorder, int[] inorder) {
  3. //递归调用的终止条件
  4. if (preorder.length == 0 || inorder.length == 0) {
  5. return null;
  6. }
  7. TreeNode root = new TreeNode(preorder[0]);
  8. //在中序遍历中找根结点位置,进行左右子树的划分
  9. for (int i = 0; i < inorder.length; i++) {
  10. //找到根节点
  11. if (root.val == inorder[i]) {
  12. //i为左子树长度
  13. root.left = buildTree(Arrays.copyOfRange(preorder, 1, i + 1), Arrays.copyOfRange(inorder, 0, i));
  14. root.right = buildTree(Arrays.copyOfRange(preorder, i + 1, preorder.length), Arrays.copyOfRange(inorder, i + 1, inorder.length));
  15. break;
  16. }
  17. }
  18. return root;
  19. }
  20. }