Bir düğümü ikili bir ağaca eklemek için aşağıdaki yöntemi yinelemeli olarak yazmayı denedim. Strateji, düğümü temelde herhangi bir NULL sol veya sağ işaretçiye yerleştirmekti. Ana işleviYinelemeli olarak binaryTree öğeye ekleme
InsertElementInBinaryTree(&root , new BinaryTreeNode{8, NULL,NULL});
sorunu hata özyinelemede olduğuna inanıyoruz böylece bu çağrı her zaman segmentasyon hatası hata döndürür olmasıdır aşağıdaki şekilde
typedef struct BinaryTreeNode {
int data;
BinaryTreeNode * left;
BinaryTreeNode * right;
} BinaryTreeNode;
void InsertElementInBinaryTree(BinaryTreeNode *root, BinaryTreeNode *element) {
if(root) {
if(root -> left == NULL) root -> left = element;
else if(root -> right == NULL) root -> right = element;
InsertElementInBinaryTree(root -> left, element);
InsertElementInBinaryTree(root -> right, element);
}
}
yöntemi denir? Sonra ikili ağaç uygulamak için herhangi bir geçerli düğüm için sol alt ağacın tüm düğümler cari düğümünde data
daha data
düşük olması ve tüm gereken çalışıyorsanız
if (root->data > element->data) {
if (root->left == NULL) {
root->left = element;
} else {
InsertElementInBinaryTree(root->left, element);
}
} else {
if (root->right == NULL) {
root->right = element;
} else {
InsertElementInBinaryTree(root->right, element);
}
}
Bağlantılı listeler ve ağaçlar gibi dinamik yapıları kullanırken, herhangi bir veriyi depolayabilmeniz için öbekte depolamak üzere ** malloc() ** kullanmanız gerekir. Ayrıca uygulamadan çıkmadan önce ** ücretsiz() ** gerekir, aksi takdirde uygulamanızın tekrar tekrar kullanılması tüm yığın belleği kullanılamaz hale getirir. –