簡體   English   中英

如何在Java二進制搜索樹中將值打印為長字符串?

[英]How to print out value as a long string in java binary search tree?

所以我試圖將值打印為我所有節點在BST中都具有的長字符串,問題是我找不到一種方法來保留這些值,因為它們是遞歸方法(inOrder preOrder postOrder),我怎么做? 當我嘗試逐行打印每個值時,我的代碼有效。 提前致謝!

例如,我有這些名字,我想使用BST按字母順序打印出來:傑里,伊萊恩,拉爾夫,愛麗絲,喬治,蘇珊,諾頓,特里西。 我想要的結果:[愛麗絲] [伊萊恩] [喬治] [傑里] [諾頓] [拉爾夫] [蘇珊] [特里克西]

import java.util.Random;

public class TreeNode {

    private String value;
    private TreeNode left;
    private TreeNode right;

    public TreeNode(String n) {
        value = n;
        left = right = null;
    }

    public void insert(String n) {
        if (n.compareTo(value) <= 0) {
            if (left == null) {
                left = new TreeNode(n);
            } else {
                left.insert(n);
            }
        } else {
            if (right == null) {
                right = new TreeNode(n);
            } else {
                right.insert(n);
            }
        }
    }

    public boolean contains(String n) {
        if (n == value) {
            return true;
        } else if (n.compareTo(value) <= 0) {
            if (left == null) {
                return false;
            } else {
                return left.contains(n);
            }
        } else {
            if (right == null) {
                return false;
            } else {
                return right.contains(n);
            }
        }
    }

    public TreeNode remove(String n) {
        if (n.compareTo(value) < 0) {
            if (left != null) {
                left = left.remove(n);
            }
        } else if (n.compareTo(value) > 0) {
            if (right != null) {
                right = right.remove(n);
            }
        } else {
            if (left == null && right == null) {
                return null;
            } else if (left != null && right == null) {
                return left;
            } else if (left == null && right != null) {
                return right;
            } else {
                Random r = new Random();
                if (r.nextBoolean()) {
                    value = left.rightMost();
                    left = left.remove(value);
                } else {
                    value = right.leftMost();
                    right = right.remove(value);
                }
            }
        }
        return this;
    }

    public String leftMost() {
        if (left == null) {
            return value;
        } else {
            return left.leftMost();
        }
    }

    public String rightMost() {
        if (right == null) {
            return value;
        } else {
            return right.rightMost();
        }
    }

    public String inOrder() {

        String temp = null;
        if (left != null) {
            left.inOrder();
        }

        temp = "["+value+"]";

        if (right != null) {
            right.inOrder();
        }

        return temp;

    }
public class BinarySearchTree {

    private TreeNode root;

    public BinarySearchTree() {
        root = null;
    }

    public void insert(String n) {
        if (root == null) {
            root = new TreeNode(n);
        } else {
            root.insert(n);
        }
    }

    public boolean contains(String n) {
        if (root == null) {
            return false;
        } else {
            return root.contains(n);
        }
    }

    public void remove(String n) {
        if (root != null) {
            root = root.remove(n);
        }
    }

    public String inOrder() {

        if (root != null) {
            root.inOrder();
        }
        return root.inOrder();
    }

您可以使用泛型類型 類似BinarySearchTree<T> ,其中T可以是任何類型的對象。 然后,在使用它時,可以將其初始化為BinarySearchTree<String> ,以防需要處理String

您可以在TreeNode類中具有靜態String變量。 由於變量的一個副本可用於所有實例,因此可以在遍歷時附加值。

例如: myPath += "["+value+"]"; 您的temp = "["+value+"]";

遍歷完成后,您可以打印TreeNode.myPath

只需將調用左側和右側子樹的inOrder的結果連接起來即可。

public String inOrder() {
    String temp = "[" + value +"]";
    if (left != null) {
        temp = left.inOrder() + temp;
    }

    if (right != null) {
        temp = temp + right.inOrder();
    }
    return temp;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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