代码随想录算法训练营第十六天| 104.二叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

104.二叉树的最大深度

题目链接:. - 力扣(LeetCode)

解题思路:用递归即可,从下层向上叠加

C:

int maxDepth(struct TreeNode* root) {
    if(root==NULL)
        return 0;
    int depth=0;
    depth=fmax(maxDepth(root->left),maxDepth(root->right))+1;
    return depth;
}

java:

class Solution {
    public int maxDepth(TreeNode root) {
        if (root == null) {
            return 0;
        }
        int leftDepth = maxDepth(root.left);
        int rightDepth = maxDepth(root.right);
        return Math.max(leftDepth, rightDepth) + 1;
    }
}

559.n叉树的最大深度

题目链接:. - 力扣(LeetCode)

解题思路:跟上题一样,只不过每个子树都要遍历;另外结点没有子节点的情况也要顾及到,所以返回depth+1

C:

int maxDepth(struct Node* root) {
    if(root==NULL)
        return 0;
    int depth=0;
    for(int i=0;inumChildren;i++)
            depth=fmax(depth,maxDepth(root->children[i]));
    return depth+1;
}

java:

class Solution {
    public int maxDepth(Node root) {
        if (root == null) return 0;
        int depth = 0;
        if (root.children != null){
            for (Node child : root.children){
                depth = Math.max(depth, maxDepth(child));
            }
        }
        return depth + 1; 
    }
}

111.二叉树的最小深度

题目链接:. - 力扣(LeetCode)

解题思路:容易错误得直接取左右子树最矮的一方算高度,但如果该二叉树为例如只有左子树的情况,会导致最终计算结果为1

C:

int minDepth(struct TreeNode* root) {
    if(root==NULL)
        return 0;
    if(root->left==NULL&&root->right!=NULL)
        return minDepth(root->right)+1;
    if(root->left!=NULL&&root->right==NULL)
        return minDepth(root->left)+1;
    return fmin(minDepth(root->left),minDepth(root->right))+1;
}

java:

class Solution {
    public int minDepth(TreeNode root) {
        if(root==null)
        return 0;
        if(root.left==null&&root.right!=null)
            return minDepth(root.right)+1;
        if(root.left!=null&&root.right==null)
            return minDepth(root.left)+1;
        return Math.min(minDepth(root.left),minDepth(root.right))+1;
    }
}

222.完全二叉树的节点个数

题目链接:. - 力扣(LeetCode)

解题思路:直接全部相加

C:

int countNodes(struct TreeNode* root) {
    if(root==NULL)
        return 0;
    return countNodes(root->left)+countNodes(root->right)+1;
}

java:

class Solution {
    public int countNodes(TreeNode root) {
        if(root==null)
            return 0;
        return countNodes(root.left)+countNodes(root.right)+1;
    }
}

你可能感兴趣的:(算法)