【leetcode】Find Largest Value in Each Tree Row

本文介绍了一种算法,用于计算二叉树每一层的最大值,并将其组合成一个列表输出。通过层序遍历的方式实现,具体思路是从根节点开始,依次将每个节点的左右子节点放入队列中,再遍历队列中的节点。
You need to find the largest value in each row of a binary tree.
Example:
Input: 

          1
         / \
        3   2
       / \   \  
      5   3   9 

Output: [1, 3, 9]

题目要求计算二叉树每一层的最大值,并且将最大值组成一个列表输出。从题目要求很容易可以看出,这是一个二叉树的层序遍历,在遍历的过程中对比求出每一层的最大值。层序遍历的思路就是从根节点开始,依次把每个节点的左右节点放入一个队列中,接着依次遍历队列中的所有节点。

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def largestValues(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        res = []
        if root == None:
            return res
        queue = []
        root.index = 0  #修改TreeNode定义,加入index成员,表示该节点所在的层数
        res.append(root.val)
        p = root
        while p!= None:
            #print p.val
            if p.left != None:
                p.left.index = p.index + 1
                queue.append(p.left)
            if p.right != None:
                p.right.index = p.index + 1
                queue.append(p.right)
            if len(res) <= p.index:
                res.append(p.val)
            else:
                res[p.index] = max(res[p.index],p.val)   #比较每层的最大值
            if len(queue) == 0:
                break
            p = queue[0]
            del queue[0]
        return res

 

转载于:https://www.cnblogs.com/seyjs/p/6419102.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值