m0_65279354 2021-12-14 10:34 采纳率: 50%
浏览 43
已结题

这是我用记事本写的(copy的,自己敲的)然后那个提示140行少分号太难找了,166行的非法表达式开始我也不懂为啥,有人帮我改改错吗,thanks!

import java.util.*;
import java.util.Scanner;
public class Exercise2504{
public static void main(String[] args){
BST tree = new BST();

Scanner input = new Scanner(System.in);
for (int i=0;i<10;i++){
tree.insert(input.nextInt());
}
tree.nonRecursivePreorder();
}
static class BST<E extends Comparable> extends AbstractTree{
protected TreeNode root;
protected int size = 0;
public BST(){
}
public BST(E[] objects){
for(int i=0;i<objects.length;i++)
insert(objects[i]);
}
@Override
public boolean search(E e){
TreeNode current= root;
while (current != null){
if(e.compareTo(current.element)<0){
current=current.left;
}else if(e.compareTo(current.element)>0){
current=current.right;
}else
return true;
}
return false;
}
@Override
public boolean insert(E e) {
if (root==null)
root = createNewNode(e);
else{
TreeNode parent =null;
TreeNode current = root;
while (current !=null)
if(e.compareTo(current.element)<0){
parent=current;
current=current.left;
}else if(e.compareTo(current.element)>0){
parent=current;
current=current.right;
}else
return false;
if(e.compareTo(parent.element)<0)
parent.left = createNewNode(e);

else
parent.right = createNewNode(e);
}
size++;
return true;
}
protected TreeNode createNewNode(E e){
return new TreeNode(e);
}
@Override
public void inorder(){
inorder(root);
}
protected void inorder(TreeNode root){
if (root == null)
return;
inorder(root.left);
System.out.print(root.element + " ");
inorder(root.right);
}
@Override
public void postorder(){
postorder(root);
}
protected void postorder(TreeNode root){
if (root==null)
return;
postorder(root.left);
postorder(root.right);
System.out.print(root.element + " ");
}
@Override
public void preorder(){
preorder(root);
}
protected void preorder(TreeNode root){
if (root==null)
return;
System.out.print(root.element+ " ");
preorder(root.left);
preorder(root.right);
}
public static class TreeNode<E extends Comparable>{
protected E element;
protected TreeNode left;
protected TreeNode right;

public TreeNode(E e){
element =e;
}
}
@Override
public int getSize(){
return size;
}
public TreeNode getRoot(){
return root;
}
public java.util.ArrayList<TreeNode> path(E e){
java.util.ArrayList<TreeNode> list = new java.util.ArrayList<TreeNode>();
TreeNode current = root;
while (current !=null) {
list.add(current);
if(e.compareTo(current.element)<0){
current = current.left;
} else if(e.compareTo(current.element)>0){
current = current.right;
}else
break;
}
return list;
}
@Override
public boolean delete(E e){
TreeNode parent= null;
TreeNode current = root;
while (current !=null)
if(e.compareTo(current.element)<0){
parent=current;
current=current.left;
}else if(e.compareTo(current.element)>0){
parent=current;
current=current.right;
}else
break;
}
if (current==null){
return false;
if(current.left==null){
if(parent==null){
root = current.right;
}else{
if(e.compareTo(parent.element)<0)
parent.left=current.right;
else
parent.right=current.right;
}
}else{
TreeNode parentOfRightMost =current;
TreeNode rightMost = current.left;
while (rightMost.right != null){
parentOfRightMost = rightMost;
rightMost=rightMost.element;
if(parentOfRightMost.right==rightMost)
parentOfRightMost.right=rightMost.left;
else
parentOfRightMost.left=rightMost.left;
}
size--;
return ture;
}
@Override
public java.util.Iterator iterator(){
return new InorderIterator();
}
class InorderIterator implements java.util.Iterator{
private java.util.ArrayList list =new java.util.ArrayList();
private int current =0;
public InorderIterator(){
inorder();
}
private void inorder(){
inorder(root);
}
private void inorder(TreeNode root){
if(root==null)
return;
inorder(root.left);
list.add(root.element);
inorder(root.right);
}
@Override
public boolean hasNext(){
if (current<list.size())
return true;
return false;
}
@Override
public E next(){
return list.get(current++);
}
@Override
public void remove(){
delete(list.get(current));
list.clear();
inorder();
}
}
public void clear(){
root=null;
size=0;
}
public void nonRecursivePreorder(){
java.util.ArrayList<TreeNode> list = new java.util.ArrayList<TreeNode>();
Stack<TreeNode> stack = new Stack<TreeNode>();
if(root==null) return;
stack.push(root);
while(!stack.isEmpty()){
TreeNode node = stack.peek();
stack.pop();
list.add(node);
if(node.right !=null && !list.contains(node.right)){
stack.push(node.right);
}
if(node.left != null && !list.contains(node.left)){
stack.push(node.left);
}
}
for (int i = 0;i< list.size();i++)
System.out.print((list.get(i)).element + " ");
}
}
}

img

  • 写回答

5条回答 默认 最新

  • 秋秋秋秋秋雨 2021-12-14 11:39
    关注

    @Override
    public boolean delete(E e){
    TreeNode parent= null;
    TreeNode current = root;
    while (current !=null)
    if(e.compareTo(current.element)<0){
    parent=current;
    current=current.left;
    }else if(e.compareTo(current.element)>0){
    parent=current;
    current=current.right;
    }else
    break;
    }
    改成
    @Override
    public boolean delete(E e){
    TreeNode parent= null;
    TreeNode current = root;
    while (current !=null){
    if(e.compareTo(current.element)<0){
    parent=current;
    current=current.left;
    }else if(e.compareTo(current.element)>0){
    parent=current;
    current=current.right;
    }else
    break;
    }

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 12月22日
  • 已采纳回答 12月14日
  • 创建了问题 12月14日

悬赏问题

  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效