# ********《数据结构与面向对象程序设计》实验八报告

## 1.实验内容

• 自己设计并实现一颗决策树，提交测试代码运行截图，要全屏，包含自己的学号信息
• 输入中缀表达式，使用树将中缀表达式转换为后缀表达式，并输出后缀表达式和计算结果（如果没有用树，正常评分。如果用到了树，即使有小的问题，也酌情给满分）

## 2.实验过程及结果：

• 链树的实现：

getRight |
---|---

   public LinkedBinaryTree<T> getRight()
{
node.root=root.getRight();
return node;
}



contains |
---|---

   public boolean contains(T targetElement)
{
if (find(targetElement)==targetElement){
return true;
}
else {
return false;
}

}
public T find(T targetElement) throws ElementNotFoundException
{
BinaryTreeNode<T> current = findNode(targetElement, root);

if (current == null)

return (current.getElement());
}
private BinaryTreeNode<T> findNode(T targetElement,
BinaryTreeNode<T> next)
{
if (next == null)
return null;

if (next.getElement().equals(targetElement))
return next;

BinaryTreeNode<T> temp = findNode(targetElement, next.getLeft());

if (temp == null)
temp = findNode(targetElement, next.getRight());

return temp;
}



toString |
---|---

public String toString()
{
new ArrayUnorderedList<BinaryTreeNode>();
new ArrayUnorderedList<Integer>();
BinaryTreeNode current;
String result = "";
int printDepth = this.getHeight();
int possibleNodes = (int)Math.pow(2, printDepth + 1);
int countNodes = 0;

Integer currentLevel = 0;
Integer previousLevel = -1;

while (countNodes < possibleNodes)
{
countNodes = countNodes + 1;
current = nodes.removeFirst();
currentLevel = levelList.removeFirst();
if (currentLevel > previousLevel)
{
result = result + "\n\n";
previousLevel = currentLevel;
for (int j = 0; j < ((Math.pow(2, (printDepth - currentLevel))) - 1); j++)
result = result + " ";
}
else
{
for (int i = 0; i < ((Math.pow(2, (printDepth - currentLevel + 1)) - 1)) ; i++)
{
result = result + " ";
}
}
if (current != null)
{
result = result + (current.getElement()).toString();
}
else {
result = result + " ";
}

}

return result;
}



preorder |
---|---

public Iterator<T> iteratorPreOrder()
{
ArrayUnorderedList<T> tempList = new ArrayUnorderedList<T>();
preOrder(root, tempList);

return new TreeIterator(tempList.iterator());
}

protected void preOrder(BinaryTreeNode<T> node,
ArrayUnorderedList<T> tempList)
{
if(node!=null)
{
System.out.print(node.getElement()+" ");
preOrder(node.getLeft(),tempList);
preOrder(node.getRight(),tempList);
}

}

• 基于中序、先序序列构造树：
• 二叉树前序遍历：先根节点，后左子树，再右子树。
• 二叉树中序遍历：先左子树，后根节点，再右子树。
• 二叉树中序遍历：先左子树，后右子树，再根节点。

• 设计一棵决策树：

• 中缀转后缀并计算：

## 实验过程中遇到的问题和解决过程

• 空指针异常

• 解决方案：检查数据的传递，进行单步调试后发现是import了一个和实验无关的包，删除该import即可。

## 参考文献

posted @ 2019-11-16 22:29  Mr.Stark丿  阅读(172)  评论(0编辑  收藏  举报