目录
104 二叉树的最大深度
思路:遍历使用后序遍历,然后再比较左右两边哪个大并且+1
class Solution {
public:
int maxDepth(TreeNode* root) {
if(root == NULL){
return 0;
}
//选择后序遍历
int leftDepth = maxDepth(root->left);
int rightDepth = maxDepth(root->right);
int res = max(leftDepth, rightDepth) + 1;
return res;
}
};
111 二叉树的最小深度
思路:利用层序遍历,如果遇到左右儿子都为空的就可以返回了
class Solution {
public:
int minDepth(TreeNode* root) {
queue<TreeNode*> q;
int low = 1;
if(root == NULL) return 0;
q.push(root);
while(!q.empty()){
int num = q.size();
while(num--){
TreeNode* tmp = q.front();
q.pop();
//如果这个节点的两个儿子都为空就可以直接返回啦
if(tmp->left == NULL && tmp->right == NULL) return low;
if(tmp->left) q.push(tmp->left);
if(tmp->right) q.push(tmp->right);
}
low++;
}
return low;
}
};
222 完全二叉树的节点个数
思路:选择后序遍历,然后递归解决
class Solution {
public:
int countNodes(TreeNode* root) {
if(root == NULL) return 0;
//选择后序遍历,先遍历在把元素加起来
int leftnum = countNodes(root->left);
int rightnum = countNodes(root->right);
int result = leftnum + rightnum + 1;
return result;
}
};