swift 算法 简单21.二叉树的层次遍历 II

本文介绍了一种解决二叉树自底向上层次遍历问题的算法,通过使用队列实现逐层遍历,并将结果反转,最终得到自底向上的层次遍历结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)

例如:
给定二叉树 [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7
返回其自底向上的层次遍历为:

[
  [15,7],
  [9,20],
  [3]
]

解法:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     public var val: Int
 *     public var left: TreeNode?
 *     public var right: TreeNode?
 *     public init(_ val: Int) {
 *         self.val = val
 *         self.left = nil
 *         self.right = nil
 *     }
 * }
 */
class Solution {
    func levelOrderBottom(_ root: TreeNode?) -> [[Int]] {
        guard  root != nil else{
            return []
        }
        var values = [[Int]]() //创建一个返回数组
        var nodes = [root!]    // 操作的root
        while !nodes.isEmpty { 
            let r = getNodes(nodes) 
            values.append(r.v) //r.v 是一个 [Int]
            
            nodes = r.nodes
        }
        
        values = values.reversed()
        return values
    }
    //得到 每一层的val 和下一层的node
    func getNodes(_ nodes: [TreeNode]) -> (v: [Int], nodes: [TreeNode]) {
        
        var values = [Int]()  
        var nextNodes = [TreeNode]() 
        for n in nodes { //循环每一层
            values.append(n.val)
            if let l = n.left {
                nextNodes.append(l)
            }
            if let r = n.right {
                nextNodes.append(r)
            }
        }
        
        return (values, nextNodes)
        
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值