import java.util.Arrays; public class Create { public TreeNode CreateTree(int[] preorder,int[] inorder) { if (preorder.length == 0 || inorder.length == 0) { return null; //前序 中序 长度都为0 返回空 } TreeNode root = new TreeNode(preorder[0]);//从前序中获取根节点。 int rootIndex = 0; //获取根节点在中序遍历中的位置 for (int i = 0; i < inorder.length; i++) { if (root.val == inorder[i]) { rootIndex = i; } } int[] Inorderleft = Arrays.copyOfRange(inorder, 0, rootIndex);//把中序遍历从根节点拆开左右两部分 这是左部分 int[] Inorderright = Arrays.copyOfRange(inorder, rootIndex + 1, inorder.length);//把中序遍历从根节点拆开 右部分 int[] Preorderleft= Arrays.copyOfRange(preorder,0,rootIndex);//把先序遍历已根节点 int[] Preorderright=Arrays.copyOfRange(preorder,rootIndex+1,preorder.length); root.left=CreateTree(Preorderleft,Inorderleft); root.right=CreateTree(Preorderright,Inorderright); return root; } }
时间: 2024-04-17 10:29:39 浏览: 36
java代码-import java.util.Scanner;
5星 · 资源好评率100%
这段代码定义了一个名为`Create`的类,并且包含了一个名为`CreateTree`的方法。该方法用于根据给定的前序遍历数组`preorder`和中序遍历数组`inorder`创建一棵二叉树。
方法首先进行了一些判断,如果前序遍历数组或中序遍历数组的长度为0,则说明没有节点可供创建,直接返回空。
接下来,方法创建了一个根节点`root`,其值为前序遍历数组的第一个元素`preorder[0]`。
然后,通过遍历中序遍历数组,找到根节点在其中的位置`rootIndex`。
接着,使用`Arrays.copyOfRange()`方法将中序遍历数组分成两部分,左部分为`Inorderleft`(从0到`rootIndex-1`),右部分为`Inorderright`(从`rootIndex+1`到数组末尾)。
同样地,使用`Arrays.copyOfRange()`方法将前序遍历数组也分成两部分,左部分为`Preorderleft`(从0到`rootIndex-1`),右部分为`Preorderright`(从`rootIndex+1`到数组末尾)。
接下来,通过递归调用`CreateTree()`方法,分别以左子树的前序遍历数组和中序遍历数组创建左子树,并以右子树的前序遍历数组和中序遍历数组创建右子树。
最后,将左子树和右子树分别赋值给根节点的`left`和`right`属性,并返回根节点`root`。
这样就完成了根据前序遍历和中序遍历数组创建二叉树的操作。
阅读全文