代码随想录训练营第二十一天 |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;
    }
};

总结:

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

相关推荐
爱睡懒觉的焦糖玛奇朵5 小时前
【从视频到数据集:焦糖玛奇朵的魔法工具使用说明】
人工智能·python·深度学习·学习·算法·yolo·音视频
Runawayliquor5 小时前
opbase:CANN 所有算子的公共地基
大数据·数据库·人工智能·算法
徐安安ye5 小时前
FlashAttention 为什么对序列长度这么“敏感”?
人工智能·算法
黎阳之光7 小时前
黎阳之光:以视频孪生重构智能监盘,为燃机打造新一代智慧电厂大脑
大数据·人工智能·算法·安全·数字孪生
绝知此事8 小时前
【算法突围 02】树形结构与数据库索引:树形结构与数据库索引:从 BST 到 B+ 树的演化与 MySQL 优化
数据库·mysql·算法·面试·b+树
清木!8 小时前
排序算法比较
数据结构·算法·排序算法
吴可可1239 小时前
用Teigha修改并保存CAD文件
数据库·算法·c#
汉克老师9 小时前
GESP6级C++考试语法知识(十七、数据结构(三、认识队列 Queue))
数据结构·c++·队列·gesp6级·gesp六级·数组模拟队列
灰灰勇闯IT10 小时前
ops-reduce:ReduceMax 与 ReduceMean 的并行优化
算法
水木流年追梦10 小时前
大模型入门-Reward 奖励模型训练
开发语言·python·算法·leetcode·正则表达式