C ile uzun bir süre sonra Java'ya dönüyorum ve basit bir konsepte yakalandım. Yataklarımı geri almak için temel bir BST uygulaması yazmaya başladım ve Java'nın katma değerli parametre geçişini anladığımı düşündüm (evet, nesne referanslarının bile, çok yaygın bir yanlış anlamadan geçtiğini anlıyorum).bst implementaion'dan geçen Java parametresi
Ekleme işlevini, aşağıdaki kodda gösterildiği gibi yinelemeli olarak uygularım ancak düğüm değerini gerçekten döndürmezsem, işe yaramadığını buldum. Çalışılmayan satırları yorumlayıp, karşılaştırma yapmak için çalışan hatlarla değiştirdim.
Düşüncelerim, gerçek kök düğümüne yapılan başvurunun bir kopyasının ekleme işlevine aktarılmasından dolayı, her işlev çağrısında yapılan değişikliklerin bellekteki gerçek nesnede yapıldığı, dolayısıyla bir düğüm eklendiysem sol ya da sağ dalda saklanmalıdır.
Kendimi çok utandırıyorum çünkü biliyorum ki burada gerçekten basit bir şey eksik olmalıyım, ama java argümanı geçiyor gibi görünüyor bana neden yanlış olduğumu merak ediyor. Yardım için teşekkürler. Eğer boş olacak bir şeyi veya başka kök dönmek zorunda böylece void add
yönteminde, sen TreeNode add
sonucu eşit kök ayarlama çünkü
public class BinaryTree {
TreeNode root;
public BinaryTree(){
root = null;
}
void add(int item){
root = add(root,item);
//add(root,item);
}
//public void TreeNode add(TreeNode node, int item){
public TreeNode add(TreeNode node, int item){
if(node == null){
node = new TreeNode(item);
} else if(item <= node.getItem()){
node.setLeft(add(node.getLeft(),item));
//add(node.getLeft(),item);
} else if(item > node.getItem()){
node.setRight(add(node.getRight(),item));
//add(node.getRight(),item);
}
return node;
//return;
}
static void printTree(BinaryTree tree){
printTree(tree.root);
}
static void printTree(TreeNode node){
if(node == null){
System.out.println("Tree Empty");
return;
}
if(node.getLeft() != null)
printTree(node.getLeft());
if(node.getRight() != null){
System.out.print(node.getItem()+ ", ");
printTree(node.getRight());
} else {
System.out.print(node.getItem()+ ", ");
}
return;
}
public static void main(String args[]){
BinaryTree tree1 = new BinaryTree();
tree1.add(10);
tree1.add(3);
tree1.add(5);
printTree(tree1);
}
}`
Kökünüz boşsa, bunu bir şeye ayarlamanız gerekir. Eğer null (node, item) eklemek için geçiş yaparsanız, yeni bir node yaratırsınız, ancak siz onu geri döndürene ve onunla bir şey yapana kadar fonksiyonun dışında herhangi bir yere referans verilmez. –
Elbette! Teşekkürler tünel vizyonu vardı! – rf22