多味的LeetCode --- 590.N叉树的后序遍历

迈不过友情╰ 2023-01-01 01:58 203阅读 0赞

题目描述:

给定一个 N 叉树,返回其节点值的后序遍历。例如,给定一个 3叉树 :

在这里插入图片描述
返回其后序遍历: [5,6,3,2,4,1]。


解题思路1: 迭代法

由于后续遍历的顺序是:左—右—根。因此,需要按照先子树后根节点的顺序进行遍历。

参考博客:快乐的LeetCode之遍历二叉树之前序、中序、后序、层序


代码1: 递归法

Python版:

  1. """
  2. # Definition for a Node.
  3. class Node:
  4. def __init__(self, val=None, children=None):
  5. self.val = val
  6. self.children = children
  7. """
  8. class Solution:
  9. def __init__(self):
  10. self.ret = []
  11. def postorder(self, root: 'Node') -> List[int]:
  12. if not root:
  13. return None
  14. for child in root.children:
  15. self.postorder(child)
  16. self.ret.append(root.val)
  17. return self.ret

C++版:

  1. /*
  2. // Definition for a Node.
  3. class Node {
  4. public:
  5. int val;
  6. vector<Node*> children;
  7. Node() {}
  8. Node(int _val) {
  9. val = _val;
  10. }
  11. Node(int _val, vector<Node*> _children) {
  12. val = _val;
  13. children = _children;
  14. }
  15. };
  16. */
  17. class Solution {
  18. public:
  19. vector<int> ret;
  20. vector<int> postorder(Node* root) {
  21. if (root == nullptr){
  22. return ret;
  23. }
  24. for (auto child:root -> children){
  25. postorder(child);
  26. }
  27. ret.push_back(root->val);
  28. return ret;
  29. }
  30. };

解题思路2: 迭代法


代码2:

  1. """
  2. # Definition for a Node.
  3. class Node:
  4. def __init__(self, val=None, children=None):
  5. self.val = val
  6. self.children = children
  7. """
  8. class Solution:
  9. def postorder(self, root: 'Node') -> List[int]:
  10. if root is None:
  11. return []
  12. stack, output = [root,],[]
  13. output = []
  14. while stack:
  15. node = stack.pop()
  16. if root is not None:
  17. output.append(node.val)
  18. for child in node.children:
  19. stack.append(child)
  20. return output[::-1]

参考链接:

https://mp.weixin.qq.com/s/Gkqk1uZdDWj-ponk0UJiTA


题目来源:

https://leetcode-cn.com/problems/n-ary-tree-postorder-traversal

发表评论

表情:
评论列表 (有 0 条评论,203人围观)

还没有评论,来说两句吧...

相关阅读