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中,以获取该根的左子树的末尾。注意:我没有投反对票@猫头鹰谢谢你的描述很有帮助。