Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit f83d5ed

Browse files
committed
添加 0222.完全二叉树的节点个数.md Scala版本
1 parent b78e750 commit f83d5ed

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

‎problems/0222.完全二叉树的节点个数.md

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -646,5 +646,68 @@ func countNodes(_ root: TreeNode?) -> Int {
646646
}
647647
```
648648

649+
## Scala
650+
651+
递归:
652+
```scala
653+
object Solution {
654+
def countNodes(root: TreeNode): Int = {
655+
if(root == null) return 0
656+
1 + countNodes(root.left) + countNodes(root.right)
657+
}
658+
}
659+
```
660+
661+
层序遍历:
662+
```scala
663+
object Solution {
664+
import scala.collection.mutable
665+
def countNodes(root: TreeNode): Int = {
666+
if (root == null) return 0
667+
val queue = mutable.Queue[TreeNode]()
668+
var node = 0
669+
queue.enqueue(root)
670+
while (!queue.isEmpty) {
671+
val len = queue.size
672+
for (i <- 0 until len) {
673+
node += 1
674+
val curNode = queue.dequeue()
675+
if (curNode.left != null) queue.enqueue(curNode.left)
676+
if (curNode.right != null) queue.enqueue(curNode.right)
677+
}
678+
}
679+
node
680+
}
681+
}
682+
```
683+
684+
利用完全二叉树性质:
685+
```scala
686+
object Solution {
687+
def countNodes(root: TreeNode): Int = {
688+
if (root == null) return 0
689+
var leftNode = root.left
690+
var rightNode = root.right
691+
// 向左向右往下探
692+
var leftDepth = 0
693+
while (leftNode != null) {
694+
leftDepth += 1
695+
leftNode = leftNode.left
696+
}
697+
var rightDepth = 0
698+
while (rightNode != null) {
699+
rightDepth += 1
700+
rightNode = rightNode.right
701+
}
702+
// 如果相等就是一个满二叉树
703+
if (leftDepth == rightDepth) {
704+
return (2 << leftDepth) - 1
705+
}
706+
// 如果不相等就不是一个完全二叉树,继续向下递归
707+
countNodes(root.left) + countNodes(root.right) + 1
708+
}
709+
}
710+
```
711+
649712
-----------------------
650713
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /