首页 > 其他分享 >二叉树 层序

二叉树 层序

时间:2023-09-09 13:33:16浏览次数:49  
标签:right cur level res 层序 queue 二叉树 append

相关阅读:https://programmercarl.com/0102.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E5%B1%82%E5%BA%8F%E9%81%8D%E5%8E%86.html#_102-%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E5%B1%82%E5%BA%8F%E9%81%8D%E5%8E%86

层序遍历即二叉树的广度优先遍历,使用队列先进先出的特性。

#层序遍历
from collections import deque 

def levelOrder(node) :
    if not node:
        return []
    
    queue = deque([node]) 
    res = []
    while queue:
        j = 0 
        level = []
        print('current length', len(queue) )
        print('current level', level)
        for i in range(len(queue)):
            cur = queue.popleft() 
            level.append(cur.val) 
            if cur.left:
                queue.append(cur.left) 
            if cur.right:
                queue.append(cur.right) 
            print('after pop length', len(queue) )
            #print(queue) 
            print('after pop level',level) 
            print(res)
            print('this is %d for loop' % i) 
        res.append(level) 
        print('this is %d while loop' % j) 
        j += 1  
        
    return res

leetcode 107:

from collections import deque
def levelOrderBottom(root):
    if not root:
        return []
    #队列
    queue = deque([root])
    #存放所有节点
    res = []
    while queue:
        #存放每一层的节点
        level = []
        for _ in range(len(queue)):
            cur = queue.popleft()
            level.append(cur.val) 
            if cur.left:
                queue.append(cur.left) 
            if cur.right:
                queue.append(cur.right)
        res.append(level)   
    return res[::-1]
                
        

 

初始队列中的元素是3,弹出时队列剩下的只有[9, 20]分别是节点3的左右子节点。此时队列长度为2,开始下一轮for 循环。

弹出节点9,没有左右子节点。继续弹出节点20,此时队列中没有元素并开始append 节点20的左右节点15, 7。

199:

from collections import deque
def rightSideView(root):
    if not root:
        return []
    queue=deque()
    res = []
    while queue:
        #记录每一层的长度
        level_size = len(queue) 
        for i in range(level_size) 
            cur = queue.popleft()
            if i == level_szie-1:
                res.append(cur.val)
            if cur.left:
                queue.append(cur.left) 
            if cur.right:
                queue.append(cur.right) 
    return res
                

因为每一层的长度等价于 len(queue) 所以找出每一层最后一个元素即可。开始想错了,遍历完输出一个二维数组,找到每个二维数组中的一维数组的最后一个,添加到结果列表中。

637

def averageOfLevels(root):
    queue = deque()
    res = []
    while queue:
        level_sum = 0 
        size = len(queue)
        for _ in range(size):
            cur = queue.popleft() 
            level_sum += cur.val 
            
            if cur.left :
                queue.append(cur.left)
                
            if cur.right:
                queue.append(cur.right) 
        res.append(level_sum) 
    return res 

思路是一样的,就是利用queue遍历每一层的特点。 

标签:right,cur,level,res,层序,queue,二叉树,append
From: https://www.cnblogs.com/yuhao0451/p/17689344.html

相关文章

  • 26.二叉树的最近公共祖先
    236.二叉树的最近公共祖先1、概要给定一个二叉树,找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树T的两个结点p、q,最近公共祖先表示为一个结点x,满足x是p、q的祖先且x的深度尽可能大(一个节点也可以是它自己的祖先)。”说明:所......
  • 【Leetcode刷题记录】1、统计参与通信的服务器;2、统计二叉树中好节点的数目;3、从两个
    1、统计参与通信的服务器题目:这里有一幅服务器分布图,服务器的位置标识在 m*n 的整数矩阵网格 grid 中,1表示单元格上有服务器,0表示没有。如果两台服务器位于同一行或者同一列,我们就认为它们之间可以进行通信。请你统计并返回能够与至少一台其他服务器进行通信的服务器的......
  • 代码随想录算法训练营第十四天|二叉树的递归法、迭代法
    二叉树的递归遍历(前中后序遍历-递归法与迭代法)递归三部曲:确定递归函数的参数和返回值确定终止条件确定单层递归的逻辑递归法对二叉树进行前中后序遍历(力扣144.145.94.)//前序遍历·递归·LC144_二叉树的前序遍历classSolution{publicList<Integer>preorderTra......
  • 用递归和非递归两种方式实现二叉树的中序遍历
    一、分析中序遍历遍历顺序为:左、根、右。二、递归实现publicclassNode{ publicintvalue;publicNodeleft;publicNoderight;publicNode(intdata){ this.value=data;}}publicvoidinOrderRecur(Nodehead){ if(head==null){ return;}i......
  • 二叉树-257二叉树的所有路径带回溯思想
    257. 二叉树的所有路径1#Definitionforabinarytreenode.2#classTreeNode:3#def__init__(self,val=0,left=None,right=None):4#self.val=val5#self.left=left6#self.right=right7classSolution:8......
  • day21 - 二叉树part07
    530. 二叉搜索树的最小绝对差详解/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*TreeNode(intx):val(x),left......
  • 二叉树
    节点(Node):树形结构中的基本单位,可以表示数据元素或对象。节点可以包含一个或多个子节点。根节点(RootNode):树的顶层节点,它没有父节点,是整个树的起点。子节点(ChildNode):树中每个节点都可以有零个或多个子节点,子节点是位于其父节点下方的节点。父节点(ParentNode):每个节点(除......
  • 用递归和非递归两种方式实现二叉树的先序遍历(前序遍历)
    一、分析先序遍历(前序遍历)遍历顺序为:根、左、右。二、递归实现publicclassNode{ publicintvalue;publicNodeleft;publicNoderight;publicNode(intdata){ this.value=data;}}publicvoidpreOrderRecur(Nodehead){ if(head==null){ return......
  • 《剑指Offer》-68-二叉树的最近公共祖先
    二叉搜索树 TreeNode*lowestCommonAncestor(TreeNode*root,TreeNode*p,TreeNode*q){ //如果p、q一定存在,那么root就一定不是空指针 TreeNode*traverse=root; while(true){ if(p->val<traverse->val&&q->val<traverse->val)traverse=tra......
  • leetcode226 翻转二叉树——简单
      #Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0,left=None,right=None):#self.val=val#self.left=left#self.right=rightclassSolution:definvertTree(self,root):......