Java 从前序和序构建二叉树

Java 从前序和序构建二叉树,java,binary-tree,Java,Binary Tree,我正在使用一种方法从给定的前序和序数组构建二叉树,但我无法理解下面的步骤 preorder_start + offset - inorder_start preorder_start + offset - inorder_start + 1 在方法setLeft()和setRight()中作为参数传递。如果有人能用一个例子来解释我,那将是一个很大的帮助 public BinaryTreeNode buildTreeFromIn

我正在使用一种方法从给定的前序和序数组构建二叉树,但我无法理解下面的步骤

                 preorder_start + offset - inorder_start
                 preorder_start + offset - inorder_start + 1
在方法
setLeft()
setRight()
中作为参数传递。如果有人能用一个例子来解释我,那将是一个很大的帮助

public BinaryTreeNode buildTreeFromInorderAndPreOrder(int[] preorder, int preorder_start, int preorder_end,
            int[] inorder, int inorder_start, int inorder_end) {
        if (preorder_start > preorder_end || inorder_start > inorder_end)
            return null;
        int data = preorder[preorder_start];                   //We took the starting root data
        BinaryTreeNode node = new BinaryTreeNode(data);        //created a node containing data 
        int offset = inorder_start;                            //offset to point the index of data in inorder array
        while (offset < inorder_end) {                          //while data is not matched in inorder array
            if (inorder[offset] == data)                     
                break;                                         //we get the offset 
            offset++;                                           
        }
        node.setLeft(buildTreeFromInorderAndPreOrder(preorder, preorder_start + 1,
                preorder_start + offset - inorder_start, inorder, inorder_start, offset - 1));
        node.setRight(buildTreeFromInorderAndPreOrder(preorder, preorder_start + offset - inorder_start + 1,
                preorder_end, inorder, offset + 1, inorder_end));
        return node;                                           //finally return the node
    }
public BinaryTreeNode buildtreefrominorder和preorder(int[]preorder,int preorder\u start,int preorder\u end,
int[]按顺序,按顺序开始,按顺序结束){
if(预排序开始>预排序结束| |顺序开始>顺序结束)
返回null;
int data=preorder[preorder_start];//我们获取了起始根数据
BinaryTreeNode=新的BinaryTreeNode(数据);//创建了一个包含数据的节点
int offset=inoorder\u start;//指向有序数组中数据索引的偏移量
while(offset
只需举个例子就可以了。基本思想是将索引偏移到查找根的顺序数组中。您需要计算inoorder start和该偏移量之间的元素,并将该计数添加到preorder数组的start中,以获取该根的左子树的末尾。注意:我没有投反对票@猫头鹰谢谢你的描述很有帮助。只需举个例子就可以了。基本思想是将索引偏移到查找根的顺序数组中。您需要计算inoorder start和该偏移量之间的元素,并将该计数添加到preorder数组的start中,以获取该根的左子树的末尾。注意:我没有投反对票@猫头鹰谢谢你的描述很有帮助。