Maison > Java > javaDidacticiel > Exemple de partage de code sur la traversée non récursive d'arbres binaires

Exemple de partage de code sur la traversée non récursive d'arbres binaires

零下一度
Libérer: 2017-07-18 17:56:53
original
1736 Les gens l'ont consulté

Qu'est-ce que le parcours non récursif d'un arbre binaire ? Le parcours non récursif des arbres binaires utilise également des idées récursives.Prenons l'exemple du parcours de précommande : recherchez d'abord le nœud dans le coin inférieur gauche, puis affichez-le, puis effectuez l'opération suivante sur le sous-arbre droit de ce nœud.

Parcours en précommande :

 public void pre_iteration(Node p) {if (p == null) return;
        Stack<Node> stack = new Stack<>();while (!stack.isEmpty() || p != null) {while (p != null) {
                System.out.println(p.val);
                stack.push(p);
                p = p.left;
            }if (!stack.isEmpty()) {
                p = stack.pop();
                p = p.right;
            }
        }
    }
Copier après la connexion

Parcours dans l'ordre :

public void in_iteration(Node p) {if (p == null) return;
        Stack<Node> stack = new Stack<>();while (!stack.isEmpty() || p != null) {while (p != null) {
                stack.push(p);
                p = p.left;
            }if (!stack.isEmpty()) {
                p = stack.pop();
                System.out.println(p.val);
                p = p.right;
            }
        }
    }
Copier après la connexion

Parcours après commande : (stack2 Il est utilisé pour enregistrer si le sous-arbre droit du nœud actuel a été parcouru)

public static void post_iteration(Node p) {if (p == null) return;
        Stack<Node> stack = new Stack<>();
        Stack<Boolean> stack2 = new Stack<>();while (!stack.isEmpty() || p != null) {while (p != null) {
                stack.push(p);
                stack2.push(false);
                p = p.left;
            }while (!stack.isEmpty() && stack2.peek()) {
                System.out.println(stack.pop().val);
                stack2.pop();
            }if (!stack.isEmpty()) {
                p = stack.peek().right;
                stack2.pop();
                stack2.push(true);
            }
        }
    }
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal