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

总结:

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

相关推荐
kaikaile19953 分钟前
MATLAB 实现:Koch & Zhao 图像水印算法(DCT域)
开发语言·算法·matlab
love_muming6 分钟前
链表每日一练
java·开发语言·数据结构·链表·idea·每日一练
QiLinkOS6 分钟前
QiLink开源生态的三维重构:基于时间、空间与社会价值的底层规则创新白皮书
大数据·c++·人工智能·科技·算法·gitee·开源
牛肉在哪里13 分钟前
ros2 从零开始28 监听广播C++
开发语言·c++·算法·机器人
玖玥拾14 分钟前
C/C++ 数据结构(二)双向链表
c语言·数据结构·c++
乐观勇敢坚强的老彭17 分钟前
GESP一级核心算法:循环与条件判断的结合
java·数据结构·算法
noipp20 分钟前
推荐题目:洛谷 P1737 [NOI2016] 旷野大计算
linux·数据结构·算法
QiLinkOS31 分钟前
极客精神与商业思维的融合实践(2)
c语言·c++·人工智能·算法·开源协议
lzjava20241 小时前
Python的数据结构,推导式、迭代器和生成器
数据结构·windows·python
code_pgf1 小时前
改进模型架构来减少MLLMs中的幻觉现象
人工智能·深度学习·算法