Merge pull request #97 from Joshua-Lu/patch-13

添加 0222.完全二叉树的节点个数 Java版本,2种解法
This commit is contained in:
Carl Sun
2021-05-14 10:20:00 +08:00
committed by GitHub

View File

@ -196,13 +196,44 @@ public:
Java
```java
class Solution {
// 通用递归解法
public int countNodes(TreeNode root) {
if (root == null) return 0;
if(root == null) {
return 0;
}
return countNodes(root.left) + countNodes(root.right) + 1;
}
}
```
int leftnum = countNodes(root.left);
int rightnum = countNodes(root.right);
```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);
}
}
return leftnum + rightnum + 1;
private int getDepth(TreeNode root) {
int depth = 0;
while (root != null) {
root = root.left;
depth++;
}
return depth;
}
}
```