94. Parcours dans l'ordre des arbres binaires. Solutions récursives et non récursives

Étant donné la racine du nœud racine d'un arbre binaire, renvoie son parcours d'ordre médian.

Description du titre

Exemple 1:
Insérez la description de l'image ici

输入:root = [1,null,2,3]
输出:[1,3,2]

Exemple 2:

输入:root = []
输出:[]

Exemple 3:

输入:root = [1]
输出:[1]

Exemple 4:
Insérez la description de l'image ici

输入:root = [1,2]
输出:[2,1]

Exemple 5:

Insérez la description de l'image ici

输入:root = [1,null,2]
输出:[1,2]

rapide:

Le nombre de nœuds dans l'arborescence est compris entre [0, 100]
-100 <= Node.val <= 100

Avancé: L'algorithme récursif est très simple, pouvez-vous le faire via un algorithme itératif?

Solution récursive

public List<Integer> inorderTraversal(TreeNode root) {
    
    
        List<Integer> list = new LinkedList<>();
        inorderTraversal(root,list);
        return list;
    }
    public void inorderTraversal(TreeNode root, List<Integer> list) {
    
    
           if (root==null){
    
    
               return;
           }
        inorderTraversal(root.left,list);
         list.add(root.val);
        inorderTraversal(root.right,list);
    }

Insérez la description de l'image ici

Solution itérative

modèle

La traversée de l'arbre binaire peut être pensée à partir de ce modèle, sur cette base, vous pouvez toujours y réfléchir attentivement.

while( 栈非空 || p 非空)
{
    
    
if( p 非空)
{
    
    

}
else
{
    
    

}
}

Idées

1. Définissez node = root

2. Effectuez les opérations suivantes en boucle

2.1 Si nœud! = Nul

Mettez node sur la pile et
définissez node = node.right

2.2 Si nœud == null

2.2.1 Si la pile est vide, terminer la boucle
2.2.2 Si la pile n'est pas vide, pop l'élément supérieur de la pile et l'assigner au
nœud pour accéder au nœud.
Set node = node.right

 public List<Integer> inorderTraversal(TreeNode root) {
    
    
        LinkedList<Integer> list = new LinkedList<>();
        if (root==null){
    
    
            return list ;
        }
        Stack<TreeNode> stack = new Stack<>();
        TreeNode node=root;
        while (!stack.isEmpty()&&node!=null){
    
    
            if (node!=null){
    
    
                stack.add(node);
                node=node.left;
            }else{
    
    
                list.add(stack.peek().val);
                node=stack.pop().right;
            }
        }

        return list;
    }

Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/pjh88/article/details/114680296
conseillé
Classement