zoukankan      html  css  js  c++  java
  • 0515-在每个树行中找到最大值

    给定一棵二叉树的根节点 root ,请找出该二叉树中每一层的最大值。

    示例1:

    输入: root = [1,3,2,5,3,null,9]
    输出: [1,3,9]
    解释:
    1
    /
    3 2
    /
    5 3 9
    示例2:

    输入: root = [1,2,3]
    输出: [1,3]
    解释:
    1
    /
    2 3
    示例3:

    输入: root = [1]
    输出: [1]
    示例4:

    输入: root = [1,null,2]
    输出: [1,2]
    解释:
      1
     
      2
    示例5:

    输入: root = []
    输出: []

    提示:

    二叉树的节点个数的范围是 [0,104]
    -231 <= Node.val <= 231 - 1

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/find-largest-value-in-each-tree-row

    python

    # 0515.二叉树的每个树行的最大值
    class Solution:
        def levelOrder(self, root: TreeNode) -> [int]:
            """
            迭代法:双端队列,每次把单层的节点遍历出队列,另外将对应的左右节点加入队列
            :param root:
            :return:
            """
            results = []
            if not root:
                return results
    
            from collections import deque
            queue = deque([root]) # 初始化队列
    
            while queue:
                size = len(queue) # 遍历队列单层长度
                res = [] # 每次遍历时初始化加入结果集中的列表
                for _ in range(size):
                    cur = queue.popleft() # 通过size控制遍历次数
                    res.append(cur.val) # 加入结果集中
                    if cur.left: # 添加当前pop节点的左节点进入队列
                        queue.append(cur.left)
                    if cur.right: # 添加当前pop节点的右节点进入队列
                        queue.append(cur.right)
                results.append(max(res)) # 当层中的所有节点的值放入list中
    
            return results
    

    golang

    package binaryTree
    
    import (
    	"container/list"
    	"math"
    )
    
    // 迭代遍历
    func largestValues(root *TreeNode) []int {
    	var res =  [][]int{}
    	if root == nil { // 空时返回
    		return nil
    	}
    	queue := list.New() // 队列初始化
    	queue.PushBack(root)
    	var tmpArr []int
    	for queue.Len() > 0 {
    		length := queue.Len()
    		for i:=0;i<length;i++ { // 遍历当层的节点
    			node := queue.Remove(queue.Front()).(*TreeNode) // 当次节点
    			if node.Left != nil { // 节点的左节点入队
    				queue.PushBack(node.Left)
    			}
    			if node.Right != nil { // 节点的右节点入队
    				queue.PushBack(node.Right)
    			}
    			tmpArr = append(tmpArr, node.Val) // 节点值加入结果集
    		}
    		res = append(res, tmpArr)
    		tmpArr = []int{}
    	}
    	// 处理层max
    	finalRes := []int{}
    	for i:=0;i<len(res);i++ {
    		finalRes = append(finalRes, max(res[i]))
    	}
    	return finalRes
    }
    
    func max(arr []int) int {
    	max := math.MinInt32
    	for i:=0;i<len(arr);i++ {
    		if arr[i] > max {
    			max = arr[i]
    		}
    	}
    	return max
    }
    
    
    
  • 相关阅读:
    FHDe2Net:Full High Definition Demoireing Network
    Single Image Reflection Removal through Cascaded Refinement
    GFN___Gated Fusion Network for Single Image Dehazing
    127. 单词接龙 哈希表 BFS 优化建图 双向搜索
    面试题 02.08. 环路检测 快慢指针
    503. 下一个更大元素 II (暴力、单调栈)
    GINet:Graph Interaction Network for Scene Parsing
    FFDNet: Toward a Fast and Flexible Solution for CNN-Based Image Denoising
    搬家完成!
    Lucas定理
  • 原文地址:https://www.cnblogs.com/davis12/p/15550174.html
Copyright © 2011-2022 走看看