Leetcode-590-N叉树的后序遍历-c++

题目详见:https://leetcode.cn/problems/n-ary-tree-postorder-traversal/description

后序:左右根

中序:左根右

前序:根左右

遍历顺序问题敬请翻阅其余资料

关于数据输入问题

以原题中示例二作为一个例子。首先是第一个节点。我们可以看到它给了一个1,然后后面的话是一个空指针。这说明1这一层就结束了。然后后面紧跟着2345。然后是空指针就表明2345是1的孩子。然后注意这里有连着的两个空指针,此时第二个空指针实际上是第二个节点2的孩子,也就表明第二个节点没有孩子。然后我们以此类推。然后是67,表明他们是3的孩子,然后是一个空指针,就表明3的孩子结束,然后到了8,8是4的孩子,然后又一个空指针表明4的孩子结束。然后是9 10,然后又一个空指针,表明5的孩子结束。然后这里有两个空指针,第二个空指针就表明6没有孩子,也就是6的孩子是空指针,以此类推。

注释代码

/*
// Definition for a Node.
class Node {
public:
    int val;	//节点的值
    vector<Node*> children;	//结点的孩子集合,从左到右依次排开,注意孩子的个数不限制

    Node() {}

    Node(int _val) {
        val = _val;
    }

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

class Solution {
public:
    void helper(const Node* root, vector<int>& res){注意这里res传的是引用,详见下方注释
        if(root == nullptr){	//如果当前节点为空,则返回
            return;
        }
        //这里从左到右遍历所有孩子,因为是后序遍历,所以优先处理所有孩子,从左到右。(左右)
        for(auto& ch: root->children){
            helper(ch, res);
        }
        //处理根(根)
        res.emplace_back(root->val);
    }

    vector<int> postorder(Node* root) {
        vector<int> res;
        helper(root, res);	//传的是引用。
        return res;
    }
};

如有错误 敬请指出!

  • 15
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值