[LeetCode] 144. Travessia pré-ordem da árvore binária, 94. Travessia inorder da árvore binária, 145. Travessia pós-ordem da árvore binária

 Autor: Xiao Lu

Coluna: "Leetcode"

Palavras favoritas: O mundo fica mais bonito por causa dos jovens que se levantam. —— "Diário do Povo"


 144. Travessia de pré-encomenda de árvores binárias

144. Travessia de pré-encomenda de árvores binárias

tema:

Dado o nó raiz da sua árvore binária  , retorne uma passagem de pré-ordemroot  dos valores de seus nós  . 

Exemplo:

Ideias:

Podemos ir até o final da árvore binária, para que haja um caminho mais à esquerda, que chamamos de subcaminho esquerdo, podemos dividir a árvore binária no subcaminho esquerdo e na subárvore direita do nó do subcaminho esquerdo, etc.

Usamos uma pilha para armazenar a subárvore esquerda, se ela chegar ao fim, saia do topo da pilha e, em seguida, percorra a subárvore direita no topo da pilha para percorrer 

código:

class Solution {
public:
    vector<int> preorderTraversal(TreeNode* root) {
        stack<TreeNode*>st;
        vector<int>v;
        TreeNode*cur=root;
        while(cur||!st.empty())
        {
            while(cur)
            {
                st.push(cur);
                v.push_back(cur->val);
                cur=cur->left;
            }
            TreeNode*top=st.top();
            st.pop();
            cur=top->right;
        }
        return v;
    }
};

 94. Travessia em ordem de uma árvore binária

94. Travessia em ordem de uma árvore binária

tema:

Dado o nó raiz de uma árvore binária  root , retorne  sua   travessia em ordem  

Exemplo:

código:

class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        stack<TreeNode*>st;
        vector<int>v;
        TreeNode*cur=root;
        while(cur||!st.empty())
        {
            while(cur)
            {
                st.push(cur);
                cur=cur->left;
            }
 
                TreeNode*top=st.top();
                st.pop();
                v.push_back(top->val);
                
                    cur=top->right;
        }
        return v;
    }
};

 145. Travessia pós-ordem de árvores binárias

 145. Travessia pós-ordem de árvores binárias

 tema:

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

Exemplo:

 código:

class Solution {
public:
    vector<int> postorderTraversal(TreeNode* root) {
        stack<TreeNode*>st;
        vector<int>v;
        TreeNode*cur=root;
        TreeNode*prev=nullptr;
        while(cur||!st.empty())
        {
            //左子路
            while(cur)
            {
                st.push(cur);
                cur=cur->left;
            }
            //从栈里面取到左子路的节点
            TreeNode*top=st.top();
            //这里右不存在或者右子树已经遍历了,才可以
            //prev记录上一个节点,如果prev是top的父亲,就说明右子树已经遍历了
            if(top->right==nullptr||top->right==prev)
            {
                v.push_back(top->val);
                st.pop();
                prev=top;
            }
            else
            {
                cur=top->right;

            }
        }
            return v;
        
    }
};

Acho que você gosta

Origin blog.csdn.net/m0_69061857/article/details/131062666
Recomendado
Clasificación