Leetcode 144. Solution récursive de traversée de précommande et solution non récursive d'arbre binaire

Leetcode 144. Parcours de précommande de l'arbre binaire

Description du titre

Donnez-vous la racine du nœud racine de l'arborescence binaire et renvoyez le parcours de précommande de sa valeur de nœud.

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

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

Exemple 2:

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

Exemple 3:

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

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

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

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?
Lieu.

Solution 1: récursivité

Concevoir une fonction, puis appeler récursivement pour réaliser le parcours

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

Solution deux: non récursif

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
{
    
    

}
}

Utilisez la pile pour réaliser

1. Poussez d' abord le nœud racine sur la pile
2. Effectuez les opérations suivantes en boucle:
Pop l'élément supérieur de
la pile Poussez le nœud gauche du nœud
supérieur de la pile sur la pile Poussez le nœud enfant du nœud supérieur de la pile sur la pile

Insérez la description de l'image ici

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

Insérez la description de l'image ici

Je suppose que tu aimes

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