Étant donné la racine du nœud racine d'un arbre binaire, renvoie son parcours d'ordre médian.
Description du titre
Exemple 1:
输入:root = [1,null,2,3]
输出:[1,3,2]
Exemple 2:
输入:root = []
输出:[]
Exemple 3:
输入:root = [1]
输出:[1]
Exemple 4:
输入:root = [1,2]
输出:[2,1]
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?
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);
}
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;
}