私はBSTがJavaとC++で実装される方法を比較しようとしています。 Javaでは、ノードはバイナリ検索ツリーは、ポインタなしでJavaではどのように機能しますか?
class Node{
int data;
Node left;
Node right;
}
やCのようになります++、それは次のようになります。
class Node{
int data;
Node *left;
Node *right;
}
私はなぜJavaのアプローチが機能しているように混乱しています。私は、C + +で左と右は、次のノードを含むメモリの領域を指し示すポインターであることを理解しています。 Javaでは、すべてがどのように接続されているのか、実際にはわかりません。左と右はノードへのポインタではなく、ノードそのものなので、Javaの各Nodeオブジェクトは3つのノード(1つは自分自身、もう1つはその子ノード)のスペースを占有しますか?誰かが実際にどのノードがどのくらい正確に接続されているのか、メモリ割り当ての違いという点で実際に何が起こっているのか説明できれば、非常に役に立ちます。
また、C++でも同じことができますか?ポインタの代わりにNode leftとNode rightを持つことができますか?もしそうなら、最初にポインタを使う利点は何ですか?ありがとうございました!
Javaコードで
Javaは参照を使用しています。 C++にも参照があります。一部の言語には参照がありません。 –
Javaはほとんどすべてのポインタを使用します。変数をオブジェクトと同じに設定するたびに、オブジェクトへのポインタを格納するだけです。違いは、Javaはあなたが直接ポインタにアクセスしたり、ポインタを操作したり、数学をすることを許さないということです。自動的かつ時にはシームレスに処理します。 – kbelder
@ArchbishopOfBanterburyいいえ、これは意味がありません。あなたが言ったように、 'left'と' right'が '' binary_search_tree'インスタンスであれば、このクラスを使うたびにランタイムエラーが発生します。メモリの割り当てが停止しません)。 Javaの参照はインスタンスではありません。インスタンスを参照に割り当てることもできますが、 'null'でもかまいません(' null'はインスタンスのインスタンスではありません)。 – Xiobiq