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

总结:

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

相关推荐
曦月逸霜20 分钟前
第34次CCF-CSP认证真题解析(目标300分做法)
数据结构·c++·算法
海的诗篇_2 小时前
移除元素-JavaScript【算法学习day.04】
javascript·学习·算法
自动驾驶小卡2 小时前
A*算法实现原理以及实现步骤(C++)
算法
Unpredictable2222 小时前
【VINS-Mono算法深度解析:边缘化策略、初始化与关键技术】
c++·笔记·算法·ubuntu·计算机视觉
编程绿豆侠2 小时前
力扣HOT100之多维动态规划:1143. 最长公共子序列
算法·leetcode·动态规划
珂朵莉MM2 小时前
2021 RoboCom 世界机器人开发者大赛-高职组(初赛)解题报告 | 珂学家
java·开发语言·人工智能·算法·职场和发展·机器人
fail_to_code3 小时前
递归法的递归函数何时需要返回值
算法
C137的本贾尼3 小时前
(每日一道算法题)二叉树剪枝
算法·机器学习·剪枝
吴声子夜歌3 小时前
OpenCV——Mat类及常用数据结构
数据结构·opencv·webpack