题目要求
给定一个N叉树,返回节点值的后序遍历。如3叉树为例子。结果为:563241
解题思路
和二叉树的后序遍历相似,在这里我们每次首先递归的去搜索子节点,然后保存父节点的值,这里边需要注意的是由于子节点个数多于2个,所以要使用for(auto child:root->children) 保证每个子节点都遍历到。
主要代码 c++
/*
// Definition for a Node.
class Node {
public:
int val;
vector<Node*> children;
Node() {}
Node(int _val, vector<Node*> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public:
vector<int> postorder(Node* root) {
if(root!=NULL)
{
for(auto child:root->children) // 先遍历孩子节点
postorder(child);
res.push_back(root->val); // 后保存父节点的值
}
return res;
}
private:
vector<int>res;
};
python法
"""
# Definition for a Node.
class Node(object):
def __init__(self, val, children):
self.val = val
self.children = children
"""
class Solution(object):
def postorder(self, root):
"""
:type root: Node
:rtype: List[int]
"""
if root is None:
return root
stack = [root]
res = []
while stack :
node = stack.pop()
for child in node.children[::1]:
stack.append(child)
res.insert(0,node.val)
return res
划重点:
有关N叉树的重点是如何遍历所有的孩子节点,掌握这个,其他的问题可以引用二叉树的思想去解答
相似题目:
解答:leetcode 429 N-ary Tree Level Order Traversal(N叉树的层序遍历)
解答:leetcode 589 N-ary Tree Preorder Traversal(N叉树的前序遍历)