簡體   English   中英

Java雙LinkedList刪除節點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM