バイナリ検索ツリーのデータ構造を調べていますが、2つの文字列ノードを比較しようとすると問題が発生します。これは私のコードです.18行目で、ルートノードと別の文字列ノードを比較したいと思います。あるノード型の文字列を別のノード型の文字列と比較するバイナリ検索ツリー
nodeToAdd.word < node.word //this is how i want to compare the nodes
私は、文字列を比較するとき、あなたが<
や>
を使用カント知っている、あなたはcompareTo()
やequals()
を使用します。ノードを比較するこのような状況では、2つのノードを比較してどのノードがアルファベット順に高いか低いかを調べるにはどうすればよいですか?
public class binarytree implements WordStore {
Node root;
public void add(String word) {
Node nodeToAdd = new Node(word);
if (root == null) {
// if there's no root, then the node becomes root
root = nodeToAdd;
}
traverseAdd(root, nodeToAdd);
}
private void traverseAdd(Node node, Node nodeToAdd) {
if (nodeToAdd.word < node.word)) {
if (node.leftChild == null) {
node.leftChild = nodeToAdd;
} else {
traverseAdd(node.leftChild, nodeToAdd);
}
//more code not relevant....
}
これ以外の方法はありませんか、これが最良のコードプラクティスですか? – Timmay696969
@ Timmay696969これはオブジェクト指向の方法です。ノードを比較し、クラスに['Comparable']を実装させたい(https://docs.oracle.com/javase/8/docs/api/java/lang /Comparable.html)。 – alfasin
@ Timmay696969これは標準的な方法であり、Nodeクラスをコレクションフレームワークでソート可能にします。しかし、Nodeに 'greaterThan()'メソッドを定義してこのコンセプトを捕捉することはできますが、そうではありません。 – Bohemian