?题目描述
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
?Solution 1: Breadth-First-Search
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution { // BFS
public:
vector<vector<int>> levelOrder(TreeNode *root) {
if (root == nullptr) return {};
vector<vector<int>> ans;
vector<TreeNode *> curr, next;
curr.push_back(root); //加入根节点
while (!curr.empty()) {
ans.push_back({});
for (TreeNode *node:curr) {
// vector.back()返回当前vector容器中末尾元素的引用,将一行看成一个整体
ans.back().push_back(node->val);
if (node->left) next.push_back(node->left);
if (node->right) next.push_back(node->right);
}
// swap 不涉及复制,相当于把内部的指针对调一下,curr指向next之前指向的区域。
curr.swap(next);
next.clear();
}
return ans;
}
};
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
if root is None:
return []
curr = [root]
next = list()
ans = list()
while curr:
temp = []
for node in curr:
temp.append(node.val)
if (node.left):
next.append(node.left)
if (node.right):
next.append(node.right)
ans.append(temp)
curr = next
next = []
return ans
?Solution 2: Depth-First-Search