[Swift Weekly Contest 122]LeetCode987. 二叉树的垂序遍历 | Ve
Given a binary tree,return the?vertical order?traversal of its nodes?values. For each node at position? Running a vertical line from? If two nodes have the same position,then the value of the node that is reported first is the value that is smaller. Return an list?of non-empty reports in order of? Example 1: Input: [3,9,20,null,15,7]
Output: [[9],[3,15],[20],[7]] Explanation: Without loss of generality,we can assume the root node is at position (0,0): Then,the node with value 9 occurs at position (-1,-1); The nodes with values 3 and 15 occur at positions (0,0) and (0,-2); The node with value 20 occurs at position (1,-1); The node with value 7 occurs at position (2,-2).
Example 2: Input: [1,2,3,4,5,6,7]
Output: [[4],[2],[1,6],[3],[7]] Explanation: The node with value 5 and the node with value 6 have the same position according to the given scheme. However,in the report "[1,6]",the node value of 5 comes first since 5 is smaller than 6.
Note:
给定二叉树,按垂序遍历返回其结点值。 对位于? 把一条垂线从? 如果两个结点位置相同,则首先报告的结点值较小。 按? 示例 1: 输入:[3,7] 输出:[[9],[7]] 解释: 在不丧失其普遍性的情况下,我们可以假设根结点位于 (0,0): 然后,值为 9 的结点出现在 (-1,-1); 值为 3 和 15 的两个结点分别出现在 (0,0) 和 (0,-2); 值为 20 的结点出现在 (1,-1); 值为 7 的结点出现在 (2,-2)。 示例 2: 输入:[1,7] 输出:[[4],[7]] 解释: 根据给定的方案,值为 5 和 6 的两个结点出现在同一位置。 然而,在报告 "[1,6]" 中,结点值 5 排在前面,因为 5 小于 6。 提示:
Runtime:?20 ms
Memory Usage:?4.1 MB
1 /** 2 * Definition for a binary tree node. 3 * public class TreeNode { 4 * public var val: Int 5 * public var left: TreeNode? 6 * public var right: TreeNode? 7 * public init(_ val: Int) { 8 * self.val = val 9 * self.left = nil 10 * self.right = nil 11 * } 12 * } 13 */ 14 class Solution { 15 var hi:[[Int]] = [[Int]]() 16 func verticalTraversal(_ root: TreeNode?) -> [[Int]] { 17 dfs(root,0,0) 18 hi.sort(by:sortArray) 19 var ret:[[Int]] = [[Int]]() 20 var i:Int = 0 21 while(i < hi.count) 22 { 23 var j:Int = i 24 while(j < hi.count && hi[j][1] == hi[i][1]) 25 { 26 j += 1 27 } 28 var item:[Int] = [Int]() 29 for k in i..<j 30 { 31 item.append(hi[k][0]) 32 } 33 ret.append(item) 34 i = j 35 } 36 return ret 37 } 38 39 func sortArray(_ a:[Int],_ b:[Int]) -> Bool 40 { 41 if a[1] != b[1] {return a[1] < b[1]} 42 if a[2] != b[2] {return a[2] > b[2]} 43 return a[0] < b[0] 44 } 45 46 func dfs(_ cur: TreeNode?,_ x:Int,_ y:Int) 47 { 48 if cur == nil {return} 49 hi.append([cur!.val,x,y]) 50 dfs(cur!.left,x-1,y-1) 51 dfs(cur!.right,x+1,y-1) 52 } 53 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |