代码随想录day16

104.二叉树的最大深度 
将求深度转换为求高度,需要统计左右子树的高度信息然后取最大值返回给上一层,所以需要用后序遍历。
class Solution {
public:
    int getdepth(TreeNode* node){
        if(node==NULL) return 0;
        //需要用后序遍历,统计左右子树的深度再取最大值
        int l=getdepth(node->left);
        int r=getdepth(node->right);
        return max(l,r)+1;
    }
    int maxDepth(TreeNode* root) {
        return getdepth(root);
    }
};

559.n叉树的最大深度

也是后序遍历,只不过需要一个for循环遍历vector容器里的孩子节点。

class Solution {
public:
    int maxDepth(Node* root) {
        if(root==NULL) return 0;
        int depth=0;
        for(int i=0;ichildren.size();i++){
            depth=max(depth,maxDepth(root->children[i]));
        }
        return depth+1;
    }
};

111.二叉树的最小深度

这题有个陷阱,题目中定义了最小深度是从根节点到最近叶子结点的最短路径上的节点数量,所以 必须排除左子树或者右子树为空的情况。

class Solution {
public:
    int getepth(TreeNode* node){
        if(node==NULL) return 0;
        int l=getepth(node->left);
        int r=getepth(node->right);
        if(node->left==NULL&&node->right!=NULL) return 1+r;
        else if(node->left&&node->right==NULL) return 1+l;
        else{
            return min(l,r)+1;
        }
    }
    int minDepth(TreeNode* root) {
        if(!root) return 0;
        return getepth(root);
    }
};

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

首先可以将完全二叉树看成一个普通的二叉树去做,用后序遍历。

class Solution {
public:
    int countNodes(TreeNode* root) {
        if(root==NULL) return 0;
        int l=countNodes(root->left);
        int r=countNodes(root->right);
        return l+r+1;
    }
};

满二叉树计算节点个数:2的深度次方-1。通过判断子树是否为满二叉树来计算节点数,如果是满二叉树就用公式计算,如果不是就继续向下递归。

注意递归的终止条件有两个,一个是遇到空,一个是经过判断后发现遇到满二叉树。

class Solution {
public:
    int countNodes(TreeNode* root) {
        if(root==NULL) return 0;
        //遇到子树是满二叉树也要终止递归向上返回
        TreeNode* lp=root->left,*rp=root->right;
        int ln=0,rn=0;
        while(lp){
            lp=lp->left;
            ln++;
        }
        while(rp){
            rp=rp->right;
            rn++;
        }
        if(ln==rn) return (2<left);
        int rightnum=countNodes(root->right);
        return leftnum+rightnum+1;
    }
};

你可能感兴趣的:(leetcode,链表,算法)