首页 > 其他分享 >Binary Tree Level Order Traversal

Binary Tree Level Order Traversal

时间:2023-11-04 21:46:09浏览次数:43  
标签:node Binary right TreeNode list Tree Traversal result root

Source

Given a binary tree, return the level order traversal of its nodes' values.
(ie, from left to right, level by level).

Example
Given binary tree {3,9,20,#,#,15,7},

    3
   / \
  9  20
    /  \
   15   7

return its level order traversal as:

[
  [3],
  [9,20],
  [15,7]
]
Challenge
Using only 1 queue to implement it.

题解 - 使用队列

此题为广搜的基础题,使用一个队列保存每层的节点即可。出队和将子节点入队的实现使用 for 循环,将每一轮的节点输出。

C++

/**
 * Definition of TreeNode:
 * class TreeNode {
 * public:
 *     int val;
 *     TreeNode *left, *right;
 *     TreeNode(int val) {
 *         this->val = val;
 *         this->left = this->right = NULL;
 *     }
 * }
 */

class Solution {
    /**
     * @param root: The root of binary tree.
     * @return: Level order a list of lists of integer
     */
public:
    vector<vector<int> > levelOrder(TreeNode *root) {
        vector<vector<int> > result;

        if (NULL == root) {
            return result;
        }

        queue<TreeNode *> q;
        q.push(root);
        while (!q.empty()) {
            vector<int> list;
            int size = q.size(); // keep the queue size first
            for (int i = 0; i != size; ++i) {
                TreeNode * node = q.front();
                q.pop();
                list.push_back(node->val);
                if (node->left) {
                    q.push(node->left);
                }
                if (node->right) {
                    q.push(node->right);
                }
            }
            result.push_back(list);
        }

        return result;
    }
};

Java

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> result = new ArrayList<List<Integer>>();
        if (root == null) return result;

        Queue<TreeNode> q = new LinkedList<TreeNode>();
        q.offer(root);
        while (!q.isEmpty()) {
            List<Integer> list = new ArrayList<Integer>();
            int qSize = q.size();
            for (int i = 0; i < qSize; i++) {
                TreeNode node = q.poll();
                list.add(node.val);
                // push child node into queue
                if (node.left != null) q.offer(node.left);
                if (node.right != null) q.offer(node.right);
            }
            result.add(new ArrayList<Integer>(list));
        }

        return result;
    }
}

源码分析

  • 异常,还是异常
  • 使用 STL 的 queue 数据结构,将 root 添加进队列
  • 遍历当前层所有节点,注意需要先保存队列大小,因为在入队出队时队列大小会变化
  • list 保存每层节点的值,每次使用均要初始化

复杂度分析

使用辅助队列,空间复杂度 O(n), 时间复杂度 O(n).

 

 

标签:node,Binary,right,TreeNode,list,Tree,Traversal,result,root
From: https://www.cnblogs.com/lyc94620/p/17809828.html

相关文章

  • 【刷题笔记】100. Same Tree
    题目Giventwobinarytrees,writeafunctiontocheckiftheyarethesameornot.Twobinarytreesareconsideredthesameiftheyarestructurallyidenticalandthenodeshavethesamevalue.Example1:Input:11/\/\......
  • 【刷题笔记】98. Validate Binary Search Tree
    题目Givenabinarytree,determineifitisavalidbinarysearchtree(BST).AssumeaBSTisdefinedasfollows:Theleftsubtreeofanodecontainsonlynodeswithkeys lessthan thenode'skey.Therightsubtreeofanodecontainsonlynodeswith......
  • Oracle中B-tree索引的访问方法(一)-- 索引逻辑结构
    B-tree索引的逻辑结构1.1B-tree索引依据不同的维度,我们可以对索引进行相应的分类。比如,根据索引键值是否允许有重复值,可以分为唯一索引和非唯一索引;根据索引是由单个列,还是由多个列构成,又可以分为单列索引和组合索引(也称之为联合索引);而从索引的数据组织结构上来分类,则最常见的是B-......
  • A. Copil Copac Draws Trees
    A.CopilCopacDrawsTrees题目大意:给出一个树边序列,要求你从1号节点建树,对于每条边只有两个端点中有一个绘制了才可以绘制此边思路:这题思路不难,但以前写图太少,遍历被卡,给每个边按序列编号,dfs如果该边的编号大于上条边\(ans++\)code:intn;vector<pii>a[N];intans[N]=......
  • vim 的nerdtree插件中如何显示当前打开的文件路径?
    树形目录nerdtree插件中如何显示当前打开的文件路径?类似这样:只需在.vimrc文件中加入下面3行就可以了"设置NerdTreemap<F3>:NERDTreeMirror<CR>map<F3>:NERDTreeToggle<CR>map<leader>r:NERDTreeFind<cr>......
  • TreeMap
    TreeMap是Map家族中的一员,也是用来存放key-value键值对的。平时在工作中使用的可能并不多,它最大的特点是遍历时是有顺序的,根据key的排序规则来TreeMap是一个双列集合,是Map的子类。底层由红黑树结构构成。TreeMap是一个基于key有序的keyvalue散列表。map根据其键的自然顺序排......
  • CF1039D You Are Given a Tree
    CF1039DYouAreGivenaTree更好的阅读体验一种神奇套路:对答案根分,根分的依据是链的长度和答案大致是一个成反比的关系。考虑确定了\(k\)怎么做。因为一个点只能在一条链里,所以dfs的时候如果能拼成一条链就一定会拼成一条链,不然就把贡献传给父亲继续尝试。对于\(k\)比......
  • C# treeview 如何遍历MenuStrip的菜单
    需求分析: 数据菜单有四级菜单,需要在程序界面登录的时候遍历菜单的内容开发环境:VSC#winform步骤1:新建一个窗体步骤2:新建一个MenuStrip,并且定义内部的名称步骤3:新建一个Treeview步骤4:开始编程,定义一个参数函数: GetMenu(TreeView V,MenuStrip S)步骤5:编写参数函数的代码......
  • k-D Tree小记
    k-DTree是一种能够高效处理\(k\)维空间信息的数据结构。建树k-DTree具有二叉搜索树的形态,二叉搜索树上的每个结点都对应\(k\)维空间内的一个点。其每个子树中的点都在一个\(k\)维的超长方体内,这个超长方体内的所有点也都在这个子树中。假设我们已经知道了\(k\)维......
  • Sourcetree 合并分支到主干
     现在要合并dev分支到prd分支1、首先切换到dev分支,然后拉取代码,然后切换到prd分支,拉取代码;2、然后右击dev分支3、选择合并dev分支至当前分支(当前分支为prd分支)4、然后prd分支会显示有多个文件待推送,推送到仓库即可......