1. 程式人生 > >[Swift]LeetCode222. 完全二叉樹的節點個數 | Count Complete Tree Nodes

[Swift]LeetCode222. 完全二叉樹的節點個數 | Count Complete Tree Nodes

pub wiki rem class intvalue and tar baidu erl

Given a complete binary tree, count the number of nodes.

Note:

Definition of a complete binary tree from Wikipedia:
In a complete binary tree every level, except possibly the last, is completely filled, and all nodes in the last level are as far left as possible. It can have between 1 and 2h nodes inclusive at the last level h.

Example:

Input: 
    1
   /   2   3
 / \  /
4  5 6

Output: 6

給出一個完全二叉樹,求出該樹的節點個數。

說明:

完全二叉樹的定義如下:在完全二叉樹中,除了最底層節點可能沒填滿外,其余每層節點數都達到最大值,並且最下面一層的節點都集中在該層最左邊的若幹位置。若最底層為第 h 層,則該層包含 1~ 2h 個節點。

示例:

輸入: 
    1
   /   2   3
 / \  /
4  5 6

輸出: 6

96ms
 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 func countNodes(_ root: TreeNode?) -> Int { 16 guard root != nil else{ 17 return 0 18 } 19 20 var leftCount = 0 21 var rightCount = 0 22 23 var leftNode = root 24 var rightNode = root 25 while leftNode != nil{ 26 leftCount += 1 27 leftNode = leftNode?.left 28 } 29 30 while rightNode != nil{ 31 rightCount += 1 32 rightNode = rightNode?.right 33 } 34 if leftCount == rightCount{ 35 return Int( pow(Double(2), Double(leftCount)) - 1.0) 36 } 37 38 return countNodes(root?.left) + countNodes(root?.right) + 1 39 40 } 41 }

100ms

 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     func countNodes(_ root: TreeNode?) -> Int {
16         guard let root = root else { return 0 }
17         
18         return 1 + countNodes(root.left) + countNodes(root.right)
19     }
20 }

104ms

 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 nodes = 0
16     
17     func countNodes(_ root: TreeNode?) -> Int {
18         guard let root = root else { return 0 }
19         nodes += 1
20         if let left = root.left {
21             countNodes(left)
22         }
23         if let right = root.right {
24             countNodes(right)
25         }
26         return nodes
27     }
28 }

112ms

 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     func countNodes(_ root: TreeNode?) -> Int {
16         if root == nil {
17             return 0
18         }
19         var count = 0
20         var stack = [TreeNode?]()
21         stack.append(root)
22         while !stack.isEmpty {
23             guard let node = stack.removeLast() else {
24                 return count
25             } 
26             count += 1
27             if let lNode = node.left {
28                 stack.append(lNode)
29             }
30             if let rNode = node.right {
31                 stack.append(rNode)
32             }
33         }
34         return count
35     }
36 }

120ms

 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 func countNodes(_ root: TreeNode?) -> Int {
16     guard let root = root else {
17         return 0
18     }
19     
20     let left = countLeftNodes(root)
21     let right = countRightNodes(root)
22     
23     if left == right {
24         return NSDecimalNumber(decimal: Decimal(pow(2.0, Double(left)) - 1.0)).intValue
25     }
26     
27     return countNodes(root.left) + countNodes(root.right) + 1
28 }
29 
30 private func countLeftNodes(_ node: TreeNode?) -> Int {
31     var height = 0, node = node
32     
33     while node != nil {
34         node = node?.left
35         height += 1
36     }
37     
38     return height
39 }
40 
41 private func countRightNodes(_ node: TreeNode?) -> Int {
42     var height = 0, node = node
43     while node != nil {
44         node = node?.right
45         height += 1
46     }
47     
48     return height
49 }
50 }

176ms

 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     func countNodes(_ root: TreeNode?) -> Int {
16         var hLeft:Int = leftHeight(root)
17         var hRight:Int = rightHeight(root)
18         if hLeft == hRight
19         {
20             return Int(pow(Double(2), Double(hLeft)) - 1)
21         }
22         return countNodes(root!.left) + countNodes(root!.right) + 1
23     }
24     
25     func leftHeight(_ root: TreeNode?) -> Int
26     {
27         if root == nil {return 0}
28         return 1 + leftHeight(root!.left)
29     }
30     
31     func rightHeight(_ root: TreeNode?) -> Int
32     {
33         if root == nil {return 0}
34         return 1 + rightHeight(root!.right)
35     }
36 }

[Swift]LeetCode222. 完全二叉樹的節點個數 | Count Complete Tree Nodes