题目描述
解题思路
专题组的二叉树有详细分析🔗
class Solution {public TreeNode buildTree(int[] preorder, int[] inorder) {/* Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]Output: [3,9,20,null,null,15,7]*/return traversal(inorder, 0, inorder.length, preorder, 0, preorder.length);}public TreeNode traversal(int[] inorder, int inLeft, int inRight,int[] preorder, int preLeft, int preRight) {// 数组大小为0if (inRight - inLeft == 0) {return null;}// 数组大小只有一个if (inRight - inLeft == 1) {return new TreeNode(inorder[inLeft]);}int rootValue = preorder[preLeft]; // 获取分割元素int rootIndex = 0;// 查找分割元素在中序遍历数组的索引for (int i = 0; i < inRight; i++) {if (inorder[i] == rootValue) {rootIndex = i;break;}}// 生成此节点TreeNode root = new TreeNode(rootValue);// 递归调用/* Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]Output: [3,9,20,null,null,15,7]*/// 按照左闭右开分割root.left = traversal(inorder, inLeft, rootIndex,preorder, preLeft + 1, preLeft + (rootIndex - inLeft) + 1);root.right = traversal(inorder, rootIndex + 1, inRight,preorder, preLeft + (rootIndex - inLeft) + 1, preRight);return root;}}
