算法-刷題記錄 - 02(Swift 實(shí)現(xiàn))

二叉樹相關(guān)

  1. 二叉樹的遍歷分為前序,中序,后序, 說(shuō)白了就是根節(jié)點(diǎn)的位置, 根節(jié)點(diǎn)在前面就是前序遍歷,以此類推
  2. 每種遍歷各有優(yōu)勢(shì), 比如獲取某個(gè)二叉樹的最大深度就采用前序遍歷, 再比如獲取所有節(jié)點(diǎn)個(gè)數(shù)就需要遍歷整個(gè)二叉樹, 此時(shí)采用后序遍歷就比較合適, 只有二叉樹才有中序遍歷, 因?yàn)槎嗖鏄涓?jié)點(diǎn)的位置不確定.
  3. 中序遍歷可以認(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ù)?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容