1.二叉树的最大深度
题目:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
采用的是后序遍历
class solution {
public:
int maxDepth(TreeNode* root) {
if (root == null) return 0;
return 1 + max(maxDepth(root->left), maxDepth(root->right));//先求它的左子树的深度,再求右子树的深度,最后取左右深度最大的数值 再+1 (加1是因为算上当前中间节点)就是目前节点为根节点的树的深度。
}
};
2.二叉树的最小深度
与上题类似,容易按部就班写成这样
class Solution {
public:
int minDepth(TreeNode* root) {
if(root==NULL) return 0;
return 1+min(minDepth(root->left),minDepth(root->right));
}
};
这是考虑不足的一种表现,不过需要小心这种情况:
所以需要添加一些条件,如下:
class Solution {
public:
int minDepth(TreeNode* root) {
if(root==NULL) return 0;
if(root->right==nullptr&&root->left!=nullptr)
return 1+minDepth(root->left);
if(root->left==nullptr&&root->right!=nullptr)
return 1+minDepth(root->right);
return 1+min(minDepth(root->left),minDepth(root->right));
}
};
3.完全二叉树的节点个数
题目:222. 完全二叉树的节点个数 - 力扣(LeetCode)
递归逻辑:先求它的左子树的节点数量,再求右子树的节点数量,最后取总和再加一 (加1是因为算上当前中间节点)就是目前节点为根节点的节点数量。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int getnum(TreeNode* node)
{
if(node==NULL) return 0;
return 1+getnum(node->right)+getnum(node->left);
}
int countNodes(TreeNode* root) {
return getnum(root);
}
};