提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
N叉树的相关遍历及找最大深度。
一、什么是树?
树是一种数据结构,它是由n(n≥0)个有限节点组成一个具有层次关系的集合。
二、遍历方法
1.N叉树的前序遍历
代码如下:
class Solution {
public:
vector<int> preorder(Node* root) {
vector<int>temp;
vector<Node *>stack;//辅助栈
if (root==NULL)
return temp;
stack.push_back(root);
while(stack.size()!=0){
root = stack.back();
stack.pop_back();
temp.push_back(root->val);//遍历节点
for (int i = root->children.size()-1;i>=0;i--){
stack.push_back(root->children[i]);
}
}
return temp;
}//用栈实现
void dfs(Node* root,vector<int> &temp){
if(root==NULL){
return ;
}
temp.push_back(root->val);
for(int i =0;i<root->children.size();i++){
dfs(root->children[i],temp);
}
}//递归实现细节 没有调用!!!
};
2.后序遍历
代码如下:
class Solution {
public:
vector<int> postorder(Node* root) {
vector<int> temp;
if(root ==NULL){
return temp;
}
vector<Node *>stack;
stack.push_back(root);
while(stack.size()!=0){
root = stack.back();
stack.pop_back();
temp.push_back(root->val);
for(int i = 0;i<root->children.size();i++){
stack.push_back(root->children[i]);
}
}
reverse(temp.begin(),temp.end());//反转
return temp;
}
void dfs(Node *root,vector<int> &temp){
if(root==NULL){
return;
}
for(int i=0;i<root->children.size();i++){
dfs(root->children[i],temp);
}
temp.push_back(root->val);
}
};
3.层次遍历
代码如下:
class Solution {
public:
vector<vector<int>> levelOrder(Node* root) {
vector<vector<int>>temp;
deque<Node *> queue;//队列
if (root==NULL)
return temp;
queue.push_back(root);
while(queue.size()!=0){
vector<int> temp1;
int m = queue.size();//当前队列个数
while(m){
Node *p = queue.front();
queue.pop_front();
--m;//消耗个数 达到了截断目的
temp1.push_back(p->val);
for(int i = 0;i<p->children.size();i++){
queue.push_back(p->children[i]);
}
}
temp.push_back(temp1);
}
return temp;
}
};
4.树的深度
代码如下:
class Solution {
private:
int maxdep = 0; //保存一个变量记录高度
public:
int maxDepth(Node* root) {
if(root==NULL){
return maxdep;
}
dfs(root,1);
return maxdep;
}
void dfs(Node *root,int dep){
if (root==NULL){
return ;
}
if(root->children.size()==0){
if (maxdep<dep){
maxdep =dep;
}
}
for (int i = 0;i<root->children.size();i++){
dfs(root->children[i],dep+1);//每次高度加一
}
}
};