0x00 题目
给定一个 N 叉树,找到其最大深度
最大深度是指从根节点
到最远叶子节点
的最长路径上的节点总数
说明: 叶子节点是指没有子节点的节点。
0x01 思路
这个题目跟【二叉树的最大深度】类似
二叉树有 2 个节点,N 叉树节点有多个
由于不知道具体个数,只能通过循环来遍历每个节点
方式一:
通过循环递归子树,然后记录最大值。
方式二:
通过层序遍历方式,从当前节点,依次向下寻找。
每往下一层,同时记录深度。
直到最后一层为空时,则找到了最远的叶子节点。
0x02 解法
语言:Swift
树节点:Node
public class Node {
public var val: Int
public var children: [Node]
public init(_ val: Int) {
self.val = val
self.children = []
}
}
递归
方式:
func maxDepth(_ root: Node?) -> Int {
if root == nil { return 0 }
var max = 0
for child in root!.children {
let depth = maxDepth(child)
if depth > max { max = depth }
}
return max + 1
}
迭代
方式:
func maxDepth(_ root: Node?) -> Int {
guard let root = root else { return 0 }
// 深度,因为当 tmp 最后为空时,depth 依旧加了 1,所以初始化为 0
var depth = 0
var queue: [Node] = []
queue.append(root)
while !queue.isEmpty {
var tmp: [Node] = []
// 添加所有下一层的子节点
while !queue.isEmpty {
let node = queue.removeFirst()
for child in node.children {
tmp.append(child)
}
}
queue = tmp
depth += 1
}
return depth
}
五笔字根学习
小程序:XWubi
配合公众号文章一起食用,效果更佳~
五笔教程之字根解析(一)