我正在完成我的任务,我的最后一个问题要求我编写一个使用二进制搜索树字符的程序。 您将从输入中读取一系列字符, 表示二叉搜索树的前序遍历。您需要从中恢复二进制搜索树的原始形状 这个序列并在侧面打印树的内容(如下图所示)并以顺序方式打印出来。
Ipublic class 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>();
这是我收到的骨架代码,我添加了异常行。我不确定如何启动此代码,因为我在binarysearchtrees上很弱。具体来说,我不知道如何在参数中使用StringItem方法。这是提供的StringItem方法。
public class StringItem extends KeyedItem<String> {
public StringItem(String str) {
super(str);
}
public String toString(){
return getKey()+"";
}
} // end StringItem
非常感谢一些详细的解释:)谢谢。
答案 0 :(得分:0)
这是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);