[英]Java double LinkedList remove node
因此,到目前為止,我的想法是制作一個雙端優先隊列,我已經有了一個使用2個鏈表的樹狀結構,我必須堅持使用接口,並且不做任何改動。 我遇到的問題是我必須制作兩個名為getMost和getLeast的方法,這兩個方法將獲取最多或最少的節點,然后將該節點設置為空。 但是事實證明這兩種方法很難實現。 您將如何去做?
我嘗試使用遞歸,但是事實證明這很困難,因為我必須通過選擇tree.root來選擇樹,但是將tree.root傳遞到遞歸方法中總是從tree.root開始
我也嘗試了我在inspectLeast()和inspectMost()中編寫的內容,但是Java通過值傳遞而不是通過引用傳遞。 有小費嗎?
PS不允許使用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);
}
}
}
}
您應該能夠修改TreeNode.getMost(TreeNode n)和TreeNode.getLeast(TreeNode 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);
}
}
最少獲取應該能夠以類似的方式進行修改,但是顯然要使用左而不是右。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.