Use recursão e iteração para completar três travessias de árvores binárias

Índice

Travessia de pré-encomenda de uma árvore binária

tema

Link do tópico de passagem de pré-encomenda

código recursivo

1. Use o código que retorna o valor do método

2. Um código cujo valor de retorno é nulo

Implementação não recursiva de travessia de pré-pedido (usando pilha) 

1. Use o código que retorna o valor do método

2. Um código cujo valor de retorno é nulo 

Travessia inorder de uma árvore binária

tema

: Dado um nó raiz de uma árvore binária, retorne seu percurso em ordem.

Link do tópico de passagem inorder

código recursivo

1. Use o código que retorna o valor do método

2. Um código cujo valor de retorno é nulo

Implementação não recursiva de travessia em ordem (usando pilha) 

1. Use o código que retorna o valor do método

2. Um código cujo valor de retorno é nulo 

Travessia pós-ordem de uma árvore binária

tema

Link do tópico de passagem pós-pedido

código recursivo

1. Use o código que retorna o valor do método

2. Um código cujo valor de retorno é nulo

Implementação não recursiva de travessia em ordem (usando pilha) 

1. Use o código que retorna o valor do método

2. Um código cujo valor de retorno é nulo

Flor completa ✿✿ヽ(°▽°)ノ✿✿


Traversal (Traversal) refere-se a seguir uma determinada rota de pesquisa, a fim de fazer uma visita a cada nó da árvore uma vez e apenas uma vez para visitar a travessia de pré-pedido (Pré-encomenda Traversal também é chamada de travessia de pré-ordem) --- visita o nó raiz ---> subárvore esquerda da raiz ---> subárvore direita da raiz.
Traversal Inorder (Inorder Traversal) - a subárvore esquerda da raiz ---> o nó raiz ---> a subárvore direita da raiz.
Postorder Traversal (Postorder Traversal) - a subárvore esquerda da raiz ---> a subárvore direita da raiz ---> o nó raiz

Travessia de pré-encomenda de uma árvore binária

tema

: Fornece o nó raiz da árvore binária  e retorna a passagem    de pré-ordem root dos valores de seus nós  

Link do tópico de passagem de pré-encomenda

https://leetcode.cn/problems/binary-tree-preorder-traversal/    

código recursivo

1. Use o código que retorna o valor do método

class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> ret = new ArrayList<Integer>();
        if(root==null){
            return ret;
        }
        ret.add(root.val);
        List<Integer> leftTree=preorderTraversal(root.left);
        ret.addAll(leftTree);
        List<Integer> rightTree=preorderTraversal(root.right);
        ret.addAll(rightTree);
        return ret;
        }
}

2. Um código cujo valor de retorno é nulo

    // 前序遍历  根  左子树  右子树
    public void preOrder(BTNode root) {
        if (root == null) {
            return;
        }
        System.out.print(root.value + " ");
        preOrder(root.left);
        preOrder(root.right);
    }

Implementação não recursiva de travessia de pré-pedido (usando pilha) 

1. Use o código que retorna o valor do método

class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> ret = new ArrayList<>();
        if (root == null) {
            return ret;
        }
        TreeNode cur = root;
        Deque<TreeNode> stack = new ArrayDeque<>();
        while (cur != null || !stack.isEmpty()) {
            while (cur != null) {
                stack.push(cur);
              //System.out.print(cur.val + " ");
                ret.add(cur.val);
                cur = cur.left;
            }
            TreeNode top = stack.pop();
            cur = top.right;
        }
        return ret;
    }
}

2. Um código cujo valor de retorno é nulo 

class Solution { 
    public void preOrderNor(BTNode root) {
        if (root == null) {
            return;
        }
        BTNode cur = root;
        Deque<BTNode> stack = new ArrayDeque<>();
        while (cur != null || !stack.isEmpty()) {
            while (cur != null) {
                stack.push(cur);
                System.out.println(cur.value + " ");
                cur = cur.left;
            }
            BTNode top = stack.pop();
            cur = top.right;
        }
    }
}

Travessia inorder de uma árvore binária

tema

: Dado o nó raiz de uma árvore binária  root , retorne  seu   percurso em ordem  .

Link do tópico de passagem inorder

: https://leetcode.cn/problems/binary-tree-inorder-traversal/ 

código recursivo

1. Use o código que retorna o valor do método

class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> ret = new ArrayList<>();
        if (root == null) {
            return ret;
        }
        List<Integer> leftTree = inorderTraversal(root.left);
        ret.addAll(leftTree);
        ret.add(root.val);
        List<Integer> rightTree =inorderTraversal(root.right);
        ret.addAll(rightTree);
        return ret;
    }
}

2. Um código cujo valor de retorno é nulo

    // 中序遍历  左子树  根  右子树
    public void inOrder(BTNode root) {
        if (root == null) {
            return;
        }
        inOrder(root.left);
        System.out.print(root.value + " ");
        inOrder(root.right);
    }

Implementação não recursiva de travessia em ordem (usando pilha) 

1. Use o código que retorna o valor do método

class Solution{
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> ret = new ArrayList<>();
        if (root == null) {
            return ret;
        }
        TreeNode cur = root;
        Deque<TreeNode> stack = new ArrayDeque<>();
        while (cur != null || !stack.isEmpty()) {
            while (cur != null) {
                stack.push(cur);
                cur = cur.left;
            }
            TreeNode top = stack.pop();
            ret.add(top.val);
            cur = top.right;
        }
        return ret;
    }
}

2. Um código cujo valor de retorno é nulo 

class Solution{    
    public void inOrderNor(BTNode root) {
        if (root == null) {
            return;
        }
        BTNode cur = root;
        Deque<BTNode> stack = new ArrayDeque<>();
        while (cur != null || !stack.isEmpty()) {
            while (cur != null) {
                stack.push(cur);
                cur = cur.left;
            }
            BTNode top = stack.pop();
            System.out.println(top.value + " ");
            cur = top.right;
        }
    }
}


Travessia pós-ordem de uma árvore binária

tema

: Dado o nó raiz de uma árvore binária  root , retorne  a travessia pós-ordem  dos valores de seus nós .

Link do tópico de passagem pós-pedido

: https://leetcode.cn/problems/binary-tree-postorder-traversal/

código recursivo

1. Use o código que retorna o valor do método

class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> ret = new ArrayList<Integer>();
        if(root==null){
            return ret;
        }
        List<Integer> leftTree = postorderTraversal(root.left);
        ret.addAll(leftTree);
        List<Integer> rightTree = postorderTraversal(root.right);
        ret.addAll(rightTree);
        ret.add(root.val);
        return ret;
     }
}

2. Um código cujo valor de retorno é nulo

    // 后序遍历
    public void postOrder(BTNode root) {
        if (root == null) {
            return;
        }
        postOrder(root.left);
        postOrder(root.right);
        System.out.print(root.value + " ");
    }

Implementação não recursiva de travessia em ordem (usando pilha) 

1. Use o código que retorna o valor do método

class Solution{
     public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> ret = new ArrayList<>();
        if (root == null) {
            return ret;
        }
        TreeNode cur = root;
        TreeNode prev = null;
        Deque<TreeNode> stack = new ArrayDeque<>();
        while (cur != null || !stack.isEmpty()) {
            while (cur != null) {
                stack.push(cur);
                cur = cur.left;
            }
            TreeNode top = stack.peek();
            if (top.right == null || top.right == prev) {
                //System.out.println(top.value + " ");
                ret.add(top.val);
                stack.pop();
                prev = top;
            } else {
                cur = top.right;
            }
        }
        return ret;
    }
}  

2. Um código cujo valor de retorno é nulo

class Solution{  
    public void postOrderNor(BTNode root) {
        if (root == null) {
            return;
        }
        BTNode cur = root;
        BTNode prev = null;
        Deque<BTNode> stack = new ArrayDeque<>();
        while (cur != null || !stack.isEmpty()) {
            while (cur != null) {
                stack.push(cur);
                cur = cur.left;
            }
            BTNode top = stack.peek();
            if (top.right == null || top.right == prev) {
                System.out.println(top.value + " ");
                stack.pop();
                prev = top;
            } else {
                cur = top.right;
            }
        }
    }
}

Flor completa ✿✿ヽ(°▽°)ノ✿✿

                           

Acho que você gosta

Origin blog.csdn.net/m0_73740682/article/details/132330142
Recomendado
Clasificación