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:
输入:root = [1,null,2,3]
输出:[1,2,3]
Exemple 2:
输入:root = []
输出:[]
Exemple 3:
输入:root = [1]
输出:[1]
Exemple 4:
输入:root = [1,2]
输出:[1,2]
Exemple 5:
输入: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
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;
}