2015-11-23 111 views
0

所以我们的想法是创建一个双端优先级队列到目前为止我已经得到了一个像使用2个链接列表的结构树,我有和接口我必须坚持不改变它。我得到的问题是我必须使2个方法称为getMost和getLeast,它获取最多或最少的节点,然后使该节点为空。但是这两种方法证明相当困难。你会怎么做呢?Java double LinkedList删除节点

我一直在使用递归尝试,但这个证明是困难的,因为我有去tree.root但传递tree.root成递归方法总是选择从树tree.root

我也有它开始尝试了我在inspectLeast()和inspectMost()中编写的内容,但Java按值传递,而不是通过引用。有小费吗?

P.S不允许使用Java集合或java util中的任何内容。

public class PAS43DPQ implements DPQ 
{ 
    //this is the tree 
    TreeNode tree = new TreeNode(); 
    //this is for the size of the array 
    int size = 0; 

    @Override 
    public Comparable inspectLeast() { 
     return tree.inspectLeast(tree.root); 
    } 

    @Override 
    public Comparable inspectMost() { 
     return tree.inspectMost(tree.root); 
    } 


    @Override 
    public void add(Comparable c) 
    { 
     tree.add(c); 
     size++; 
    } 

    @Override 
    public Comparable getLeast() { 
     if (tree.root != null){ 

     } 
     return getLeast(); 
    } 

    @Override 
    public Comparable getMost(){ 
     Comparable most = getMost(); 
     return most; 
    } 

    @Override 
    public boolean isEmpty() { 
     return (size > 0)?true:false; 
    } 

    @Override 
    public int size() { 
     return this.size; 
    } 


    class TreeNode{ 
     private Comparable value; 
     private TreeNode left, right, root; 

     //constructors 
     public TreeNode() {} 

     public TreeNode(TreeNode t) { 
      this.value = t.value; 
      this.left = t.left; 
      this.right = t.right; 
      this.root = t.root; 
     } 

     public TreeNode(Comparable c) { 
      this.value = (int) c; 
     } 

     public void add(Comparable input){ 
      if(root == null){ 
       root = new TreeNode(input); 
       return; 
      } else { 
       insert(root, input); 
      } 
     } 

     public Comparable inspectLeast(TreeNode n){ 
      if (n == null) 
       return null; 

      if (n.left == null){ 
       TreeNode least = n; 
       return least.value; 
      } 
      return inspectLeast(n.left); 
     } 

     public Comparable inspectMost(TreeNode n){ 
      if (n == null) 
       return null; 

      if (n.right == null){ 
       TreeNode most = n; 
       return most.value; 
      } 
      return inspectMost(n.right); 
     } 

     public Comparable getMost(TreeNode n){ 
      if(n.right == null) 
       return n.value; 

      return tree.getMost(right); 
     } 

     public void insert(TreeNode n, Comparable input){ 
      if(input.compareTo(n.value) >= 0){ 
       if (n.right == null) { 
        n.right = new TreeNode(input); 
        return; 
       } 
       else 
        insert(n.right, input); 
      } 

      if(input.compareTo(n.value) < 0){ 
       if(n.left == null) { 
        n.left = new TreeNode(input); 
        return; 
       } 
       else 
        insert(n.left, input); 
      } 
     } 
    } 
} 

回答

0

你应该能够修改TreeNode.getMost(树节点n)和TreeNode.getLeast(树节点n)的类似以下内容:

public class TreeNode{ 
    // Also, your parameter here seems to be superfluous. 
    public TreeNode getMost(TreeNode n) { 
     if (n.right == null) { 
      n.root.right = null; 
      return n; 
     } 
     return n.getMost(n); 
    } 
} 

获取至少应该能够被修改类似的方式,但显然使用左侧而非右侧。