代码随想录训练营第二十一天 |589.N叉数的前序遍历 590.N叉树的后序遍历

589.N叉数的前序遍历:

状态:已做出

思路:

N叉树的前序遍历和二叉树很像,我这里使用栈来实现。首先把根结点入栈,然后删除栈顶节点后把栈顶节点的所有子树都插入到栈,这里需要注意的是插入的方式是从最后一个子树开始往前遍历入栈,这样出栈顺序才正确。按照这个出栈根结点,进栈子树节点,就可以实现前序遍历。

代码如下:

cpp 复制代码
/*
// Definition for a Node.
class Node {
public:
    int val;
    vector<Node*> children;

    Node() {}

    Node(int _val) {
        val = _val;
    }

    Node(int _val, vector<Node*> _children) {
        val = _val;
        children = _children;
    }
};
*/

class Solution {
public:
    vector<int> preorder(Node* root) {
        stack<Node*>st;//使用栈来实现前序遍历
        vector<int>result;
        if(!root) return result;
        st.push(root);
        while(!st.empty()) {
            Node* temp=st.top();//取出栈顶元素,这就是前序遍历的根节点处理
            st.pop();
            result.push_back(temp->val);
            //以下循环就是让每个节点的子树全部都依次入栈
            for(int i=temp->children.size()-1;i>=0;--i) {
                st.push(temp->children[i]);
            }
        }
        return result;
    }
};

590.N叉树的后序遍历:

状态:已做出

思路:

和N叉树的前序遍历一样,最后对其进行反转即可。

代码如下:

cpp 复制代码
/*
// Definition for a Node.
class Node {
public:
    int val;
    vector<Node*> children;

    Node() {}

    Node(int _val) {
        val = _val;
    }

    Node(int _val, vector<Node*> _children) {
        val = _val;
        children = _children;
    }
};
*/

class Solution {
public:
    vector<int> postorder(Node* root) {
        stack<Node*>st;
        vector<int>result;
        if(!root) return result;
        st.push(root);
        while(!st.empty()) {
            Node* temp=st.top();
            st.pop();
            result.push_back(temp->val);
            //这里的循环和前序遍历相反,这样才能让最后反转的数组符合后序遍历
            for(int i=0;i<temp->children.size();++i) {
                st.push(temp->children[i]);
            }
        }
        reverse(result.begin(), result.end());//反转数组
        return result;
    }
};

总结:

这两道题目就是二叉树前后序遍历的衍生,和二叉树的前后序遍历一样的操作,主要还是练习前后序操作的思想。

相关推荐
We་ct3 分钟前
LeetCode 228. 汇总区间:解题思路+代码详解
前端·算法·leetcode·typescript
AIpanda8887 分钟前
如何借助AI销冠系统提升数字员工在销售中的成效?
算法
啊阿狸不会拉杆8 分钟前
《机器学习导论》第 7 章-聚类
数据结构·人工智能·python·算法·机器学习·数据挖掘·聚类
木非哲13 分钟前
机器学习--从“三个臭皮匠”到 XGBoost:揭秘 Boosting 算法的“填坑”艺术
算法·机器学习·boosting
Re.不晚17 分钟前
JAVA进阶之路——数据结构之线性表(顺序表、链表)
java·数据结构·链表
小辉同志20 分钟前
437. 路径总和 III
算法·深度优先·广度优先
笨笨阿库娅25 分钟前
从零开始的算法基础学习
学习·算法
不想睡觉_32 分钟前
优先队列priority_queue
c++·算法
那个村的李富贵9 小时前
CANN加速下的AIGC“即时翻译”:AI语音克隆与实时变声实战
人工智能·算法·aigc·cann
power 雀儿9 小时前
Scaled Dot-Product Attention 分数计算 C++
算法