二叉树的层序遍历(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 };
posted @ 2020-06-19 22:52  孔子?孟子?小柱子!  阅读(299)  评论(0编辑  收藏  举报