二叉树的层序遍历(Python and C++解法)
题目:
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal
思路:
输出需要是二维数组的形式。一层输出一行。
Python解法:
1 # 定义二叉树 2 class TreeNode: 3 def __init__(self, x): # self相当于类的实例 4 self.val = x 5 self.left = None 6 self.right = None 7 8 9 class Solution(object): 10 @staticmethod 11 def level_order(self, root: TreeNode): 12 if root is None: 13 return [] 14 self.result = [] # 存储最终结果 15 self._dfs(root, 0) # 初始化递归函数 16 return self.result 17 18 def _dfs(self, node, level): 19 if node is None: # 递归终止条件 20 return 21 if len(self.result) < level + 1: # 如果二维数组的行数小于当前树的层数,二维数组就添加一行 22 self.result.append([]) 23 self.result[level].append(node.val) # 由于递归调用,所以只要是该层的节点,最终都会被添加进去 24 self._dfs(node.left, level+1) 25 self._dfs(node.right, level+1)
C++解法:
1 struct TreeNode { 2 int val; 3 TreeNode *left; 4 TreeNode *right; 5 TreeNode(int x) : val(x), left(NULL), right(NULL) {} 6 }; 7 8 class Solution { 9 public: 10 vector<vector<int>> result; // 定义存储最终结果的二维数组为全局变量,供不同函数使用 11 vector<vector<int>> levelOrder(TreeNode* root) { 12 if (root == NULL) 13 return {}; 14 _dfs(root, 0); // 初始化递归函数 15 return result; 16 } 17 void _dfs(TreeNode *node, int level) { 18 if (node == NULL) return; // 递归终止条件不能忘 19 if (result.size() < level + 1) 20 result.push_back({}); // 如果二维存储数组中的行数小于树的层数, 二维数组增加一行 21 result[level].push_back(node->val); // 可以直接在某一行进行push_back 22 _dfs(node->left, level + 1); 23 _dfs(node->right, level + 1); 24 } 25 };