Update 0222.完全二叉树的节点个数.md

添加 0222.完全二叉树的节点个数 Java版本,2种解法
This commit is contained in:
Joshua
2021-05-14 01:02:55 +08:00
committed by GitHub
parent 1f5408b160
commit f856bcfef0

View File

@ -194,7 +194,49 @@ public:
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