停留在binarysearchtree实现* Java *
我在做我的任务,最后一个问题让我写一个使用二进制搜索树的程序。 您将从输入中读取一系列字符, 表示二叉搜索树的前序遍历。您需要从 这个序列中恢复二叉搜索树的原始形状,并以横向(如下图所示)和顺序方式打印出树的内容。停留在binarysearchtree实现* Java *
Ipublic类PrintSideways {
public static void main(String[] args) { if(args.length == 0 || args[0].length() == 0)
{
throw new IllegalArgumentException ("This is an invalid argument");
}
String chars = args[0];
BinarySearchTree<StringItem, String> bst = new BinarySearchTree<StringItem, String>();
这是我收到的骨架代码和我增加了例外线给它。我并不确定如何启动此代码,因为我在二元搜索树上很弱。具体来说,我没有得到如何在参数中使用StringItem方法。这是提供的StringItem方法。
public class StringItem extends KeyedItem<String> { public StringItem(String str) {
super(str);
}
public String toString(){
return getKey()+"";
}
} // end StringItem
一些详细的解释将不胜感激:)谢谢。
回答:
以下是C#中的一个快速实现,但您仍然需要对其进行调整以满足结构的需求。您应该仍然得到算法的思想,或者如果你有困难我可以试着解释:
private BinaryTreeNode<int> ReconstructPreorderRecursive(List<int> inorder, List<int> preorder, int inorderStart, int inorderEnd) {
BinaryTreeNode<int> root = new BinaryTreeNode<int>();
root.Value = preorder[preorderIndex];
int index = inorder.IndexOf(preorder[preorderIndex]);
//left subtree
if (index > inorderStart)
{
preorderIndex++;
root.LeftChild = ReconstructPreorderRecursive(inorder, preorder, inorderStart, index - 1);
if (root.LeftChild != null)
root.LeftChild.Parent = root;
}
//right subtree
if (index < inorderEnd)
{
preorderIndex++;
root.RightChild = ReconstructPreorderRecursive(inorder, preorder, index + 1, inorderEnd);
if (root.RightChild != null)
root.RightChild.Parent = root;
}
return root;
}
用法:
newTree.Root = ReconstructPreorderRecursive(lstInorder, lstPreorder, 0, lstInorder.Count - 1);
以上是 停留在binarysearchtree实现* Java * 的全部内容, 来源链接: utcz.com/qa/258145.html