zoukankan      html  css  js  c++  java
  • 二叉树的层序遍历(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 };
  • 相关阅读:
    openpyxl python操作Excel表格,
    ansible剧本
    ansible基础知识(二)
    ansible基础知识
    Flask-Migrate
    Python3-笔记-B-003-数据结构-元组tuple( )
    Python3-笔记-B-002-数据结构-字典dict{ }
    Python3-笔记-B-001-数据结构-列表list[ ]
    Python3-笔记-A-001-基本语法
    cordova 学习链接
  • 原文地址:https://www.cnblogs.com/kongzimengzixiaozhuzi/p/13166838.html
Copyright © 2011-2022 走看看