mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 19:44:45 +08:00
Update 0222.完全二叉树的节点个数.md
添加 0222.完全二叉树的节点个数 Java版本,2种解法
This commit is contained in:
@ -194,7 +194,49 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
Java:
|
Java:
|
||||||
|
```java
|
||||||
|
class Solution {
|
||||||
|
// 通用递归解法
|
||||||
|
public int countNodes(TreeNode root) {
|
||||||
|
if(root == null) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return countNodes(root.left) + countNodes(root.right) + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```java
|
||||||
|
class Solution {
|
||||||
|
/**
|
||||||
|
* 针对完全二叉树的解法
|
||||||
|
*
|
||||||
|
* 满二叉树的结点数为:2^depth - 1
|
||||||
|
*/
|
||||||
|
public int countNodes(TreeNode root) {
|
||||||
|
if(root == null) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int leftDepth = getDepth(root.left);
|
||||||
|
int rightDepth = getDepth(root.right);
|
||||||
|
if (leftDepth == rightDepth) {// 左子树是满二叉树
|
||||||
|
// 2^leftDepth其实是 (2^leftDepth - 1) + 1 ,左子树 + 根结点
|
||||||
|
return (1 << leftDepth) + countNodes(root.right);
|
||||||
|
} else {// 右子树是满二叉树
|
||||||
|
return (1 << rightDepth) + countNodes(root.left);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getDepth(TreeNode root) {
|
||||||
|
int depth = 0;
|
||||||
|
while (root != null) {
|
||||||
|
root = root.left;
|
||||||
|
depth++;
|
||||||
|
}
|
||||||
|
return depth;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
Python:
|
Python:
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user