leetcode刷題筆記 一百九十九題 二叉樹的右檢視
阿新 • • 發佈:2020-09-19
leetcode刷題筆記 一百九十九題 二叉樹的右檢視
源地址:199. 二叉樹的右檢視
問題描述:
給定一棵二叉樹,想象自己站在它的右側,按照從頂部到底部的順序,返回從右側所能看到的節點值。
示例:
輸入: [1,2,3,null,5,null,4]
輸出: [1, 3, 4]
解釋:1 <---
/
2 3 <---
\
5 4 <---
//基於DFS的遞迴方法 優先右側 /** * Definition for a binary tree node. * class TreeNode(_value: Int = 0, _left: TreeNode = null, _right: TreeNode = null) { * var value: Int = _value * var left: TreeNode = _left * var right: TreeNode = _right * } */ //DFS 遞迴 import scala.collection.mutable object Solution { def rightSideView(root: TreeNode): List[Int] = { val res = new mutable.ListBuffer[Int]() def dfs(root: TreeNode, depth: Int): Unit = { if (root == null) return if (depth == res.size) res.append(root.value) dfs(root.right, depth+1) dfs(root.left, depth+1) } dfs(root, 0) return res.toList } } //BFS 逐層遍歷 取每層最後側節點 /** * Definition for a binary tree node. * class TreeNode(_value: Int = 0, _left: TreeNode = null, _right: TreeNode = null) { * var value: Int = _value * var left: TreeNode = _left * var right: TreeNode = _right * } */ //BFS import scala.collection.mutable object Solution { def rightSideView(root: TreeNode): List[Int] = { val res = new mutable.ListBuffer[Int]() if (root == null) return res.toList val queue = new mutable.Queue[TreeNode]() queue.enqueue(root) while (queue.isEmpty == false){ val size = queue.size for(i <- 0 to size-1){ val node = queue.dequeue if (node.left != null) queue.enqueue(node.left) if (node.right != null) queue.enqueue(node.right) if (i == size-1) res.append(node.value) } } return res.toList } }