二叉樹相關(guān)
- 二叉樹的遍歷分為前序,中序,后序, 說(shuō)白了就是根節(jié)點(diǎn)的位置, 根節(jié)點(diǎn)在前面就是前序遍歷,以此類推
- 每種遍歷各有優(yōu)勢(shì), 比如獲取某個(gè)二叉樹的最大深度就采用前序遍歷, 再比如獲取所有節(jié)點(diǎn)個(gè)數(shù)就需要遍歷整個(gè)二叉樹, 此時(shí)采用后序遍歷就比較合適, 只有二叉樹才有中序遍歷, 因?yàn)槎嗖鏄涓?jié)點(diǎn)的位置不確定.
- 中序遍歷可以認(rèn)為是遍歷有序數(shù)組
題目1:
二叉樹的最大深度
class Node {
var left: Node?
var right: Node?
var val: String
init(val: String) {
self.val = val
}
}
//解法1
var depth = 0, res = 0
func maxDepth(node: Node) -> Int {
reverse(node: node)
return res
}
func reverse(node: Node?) {
if node == nil {return}
depth += 1
if node?.left == nil, node?.right == nil {
res = Swift.max(depth, res)//到達(dá)葉子節(jié)點(diǎn),
}
reverse(node: node?.left)
reverse(node: node?.right)
depth -= 1
}
//解法2
/// 輸入根節(jié)點(diǎn) 返回二叉樹的最大深度
/// - Parameter node: 輸入根節(jié)點(diǎn)
/// - Returns: 最大深度
func reverse1(node: Node?) -> Int {
if node == nil {return 0}
let left = reverse1(node: node?.left)
let right = reverse1(node: node?.right)
res = Swift.max(left, right) + 1
return res
}
題目2:
如果把根節(jié)點(diǎn)看做第 1 層,如何打印出每一個(gè)節(jié)點(diǎn)所在的層數(shù)?