J'essaye de créer un arbre binaire. La seule chose que l'on me donne est le nombre de nœuds dans l'arbre. La première chose qui m'est venue à l'esprit est d'utiliser un index (BFS order) pour garder la trace du nombre total de nœuds, puis utiliser une définition récursive. Voici mon pseudo-code pour le faire.Créer un arbre binaire de taille fixe
N = 10 //binary tree total node count
i = 0 //global integer
function()
if i > N
return True
create node i
i = i + 1
function(i) //left
i = i + 1
function(i) //right
-je utiliser une variable globale dans cette définition qui me fait me sentir comme peut-être je viole les règles de récursion. Y at-il une meilleure façon de faire ce que je fais, si c'est le cas, peut-elle être améliorée?
Note: Je pose des questions sur la méthode théorique, pas sur le code.
Modifier: Je viens de réaliser que cette méthode échoue. Je suis ouvert aux suggestions. L'exigence pour cet arbre n'est pas d'ajouter un élément à une profondeur, si la profondeur précédente n'est pas remplie de nœuds (tous les nœuds ont 2 enfants), excusez-moi de ne pas le mentionner auparavant, comme pour la pile que j'ai mentionnée dans les commentaires, cela n'a rien à voir avec la question, juste la façon régulière de parcourir les arbres de façon itérative.
La question ne dit pas que vous devez générer l'arborescence récursivement; Peut-être avez-vous mal compris la question? Comme pour l'arbre généré: il s'agit essentiellement d'une liste chaînée, puisque seuls les enfants restants seront créés. Quant à 'i': votre code n'est pas correct, mais il est déjà à mi-chemin d'une solution sans la variable globale. Vous avez 'function' défini sans paramètre, mais l'utiliser avec' i' comme paramètre ... – Paul
@Paul J'ai choisi d'utiliser la récursivité à des fins d'apprentissage. Mais méthode itérative est également applicable, besoin de définir une pile dans le programme. – Rockybilly
Vous devriez clarifier ce que vous voulez réellement. Surtout: quelles sont les exigences pour l'arbre? Votre algorithme crée un arbre parfaitement fin, à part le fait que l'arbre contienne des nœuds 'N + 1'. Et qu'est-ce que cette question a à voir avec une pile? – Paul