题目描述:
给定一个 N 叉树,返回其节点值的前序遍历。
例如,给定一个 3叉树 :
返回其前序遍历: [1,3,5,6,2,4]。
思路:
递归和迭代
二叉树的前序遍历是,先遍历根节点,再遍历左节点,最后遍历右节点
n叉树利用二叉树的性质,进行遍历只是不再分为左右节点,而是孩子
递归:
C++:
class Solution {
public:
void dfs(Node* root,vector<int>& res){
if(!root) return;
res.push_back(root->val);
for(auto p:root->children)
dfs(p,res);
}
vector<int> preorder(Node* root) {
vector<int>res;
dfs(root,res);
return res;
}
};
python:
class Solution:
def preorder(self, root: 'Node') -> List[int]:
res = []
def dfs(root):
if not root:return
res.append(root.val)
for child in root.children:
dfs(child)
dfs(root)
return res
迭代:
C++:
class Solution {
public:
vector<int> preorder(Node* root) {
vector<int>res;
if(!root) return res;
stack<Node*>temp;
temp.push(root);
while(!temp.empty()){
Node* node = temp.top();
res.push_back(node->val);
temp.pop();
for(int i=node->children.size()-1;i>=0;i--){
temp.push(node->children[i]);
}
}
return res;
}
};
python:
class Solution:
def preorder(self, root: 'Node') -> List[int]:
res = []
if not root:return res
temp=[root]
while temp:
node = temp.pop()
res.append(node.val)
if node.children:
for i in range(len(node.children)-1,-1,-1):
temp.append(node.children[i])
return res