二叉树的层序遍历两种方法
题目
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]
示例 2:
输入:root = [1]
输出:[[1]]
示例 3:
输入:root = []
输出:[]
思路
递归法:递归的方法就是每次要处理好三要素,但是注意这里的处理只能一次性处理一个节点,而不能是一层的所有的元素,因为他存储的方式是链式的,只能根据它上一个节点的位置去寻找下一个元素,所以一次不能处理一层的元素,所以需要一个参数depth来表示现在的循环是哪一层。
迭代法:迭代法的话注意理解一下是要用的队列这个结构的话那么一切都好办了
代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
/*
层序遍历的迭代法
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root){
vector<vector<int>> result;
queue<TreeNode*> qu;
if(root==NULL){
return result;
}
qu.push(root);
while(!qu.empty()){
vector<int> re;
int size = qu.size();
for(int i=0;i<size;i++){
TreeNode* QueueHead = qu.front();
qu.pop();
re.push_back(QueueHead->val);
if(QueueHead->left){
qu.push(QueueHead->left);
}
if(QueueHead->right){
qu.push(QueueHead->right);
}
}
result.push_back(re);
}
return result;
}
};
/*
层序遍历的递归法
*/
class Solution {
public:
void level(TreeNode* cur,vector<vector<int>>& result,int depth){
if(cur==NULL){
return;
}
if(depth == result.size()){
result.push_back(vector<int>());
}
result[depth].push_back(cur->val);
level(cur->left,result,depth+1);
level(cur->right,result,depth+1);
}
vector<vector<int>> levelOrder(TreeNode* root){
vector<vector<int>> result;
int depth = 0;
level(root,result,depth);
return result;
}
};

浙公网安备 33010602011771号