LC102
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
class Solution {
public:
void getResult(TreeNode *root, int depth, vector<vector<int>> &ans){
//深度优先搜索
//这个是用于每一层打印结果的函数
if (root == NULL) return;//特例处理
if (depth == ans.size()) {
//在当前层数与最终结果(二维动态)数组的长度相同时
ans.push_back(vector<int>());//新建一行~
//在二维数组没有对应”行“的时候 新建这一“行”————就这作用~
}
ans[depth].push_back(root->val);//向结果数组的尾部中加入根节点
getResult(root->left, depth+1, ans);//逐层进行递归
getResult(root->right,depth+1, ans);
return;
}
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> ans;
getResult(root, 0, ans);//从第零层开始遍历
return ans;
}
};
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
if not root: return [] #特例处理
res, queue = [], collections.deque() #初始化队列
queue.append(root) #把根压入队列
while queue: #队列只要不为空 就一直循环
tmp = [] #初始化临时列表
for _ in range(len(queue)): #当前层打印循环
node = queue.popleft() #队首元素出队 记为node 因为是双向队列 所以从左边出!
tmp.append(node.val) #将node加到结果列表中
if node.left: queue.append(node.left) #左子节点如果非空 加入队列末尾
if node.right: queue.append(node.right) #右子节点如果非空 加入队列末尾
res.append(tmp) #将这一层的结果打印出来 加到最后的二维结果数组中~
return res
LC107
给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
与上面的唯一不同——
这个层序遍历是
从下到上的!
所以C++代码中的 getResult函数完全不用动
再敲一遍~
下面的主函数中 加一步二维数组内部的“一位数组交换”即可!!
ps: 其实下面这个方法更加简单
即可~
class Solution {
public:
void getResult(TreeNode *root, int depth, vector<vector<int>> &ans){
if (root == NULL){
return;
}
if(depth == ans.size()){
ans.push_back(vector<int>());
}
ans[depth].push_back(root->val);
getResult(root->left, depth+1, ans);
getResult(root->right, depth+1, ans);
return;
}
vector<vector<int>> levelOrderBottom(TreeNode* root) {
vector<vector<int>> ans;
getResult(root, 0, ans);//先常规从上到下打印出来二维数组
reverse(ans.begin(),ans.end());
return ans;
}
};
跟LC102没区别的好吧
return ans[::-1]即可~
class Solution:
def levelOrderBottom(self, root: TreeNode) -> List[List[int]]:
if not root: return [];
ans,queue=[],collections.deque()
queue.append(root)
while queue:
tmp = []
for _ in range(len(queue)):
node = queue.popleft()#队首元素出队 因为是双向队列 所以从左边出!
tmp.append(node.val)
if node.left: queue.append(node.left)
if node.right: queue.append(node.right)
ans.append(tmp)
return ans[::-1]