leetcode刷題筆記一百零三題 二叉樹的鋸齒層次遍歷
阿新 • • 發佈:2020-08-03
leetcode刷題筆記一百零三題 二叉樹的鋸齒層次遍歷
源地址:103. 二叉樹的鋸齒形層次遍歷
問題描述:
給定一個二叉樹,返回其節點值的鋸齒形層次遍歷。(即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行)。
例如:
給定二叉樹 [3,9,20,null,null,15,7],3
/
9 20
/
15 7
返回鋸齒形層次遍歷如下:[
[3],
[20,9],
[15,7]
]
/** 本題與102題基本一致,可分為迭代與遞迴的方法,基本思路一致,需要設定一個Order變數指示當前插入方向 迭代方法:可以使用雙端對列,這裡我使用的還是queue,只是根據當order_left為false時,插入floorRes.reverse 遞迴方法:DFS思想基本一致,就是根據order值和level%2的值,選擇插入floorRes頭部還是尾部 */ /** * Definition for a binary tree node. * class TreeNode(var _value: Int) { * var value: Int = _value * var left: TreeNode = null * var right: TreeNode = null * } */ import scala.collection.mutable import util.control.Breaks._ object Solution { def zigzagLevelOrder(root: TreeNode): List[List[Int]] = { val queue = new mutable.Queue[TreeNode]() var orderLeft = true val res = new mutable.ListBuffer[List[Int]]() if (root == null) return List() queue.enqueue(root) while (queue.isEmpty == false){ val queueSize = queue.size val floorRes = new mutable.ListBuffer[Int]() for(i <- 0 until queueSize){ breakable{ val tempNode = queue.dequeue if (tempNode == null) break() floorRes += tempNode.value queue.enqueue(tempNode.left) queue.enqueue(tempNode.right) } } if (orderLeft == true){ if(floorRes.size > 0) res += floorRes.toList orderLeft = false } else{ if(floorRes.size > 0) res += floorRes.reverse.toList orderLeft = true } } return res.toList } }