002.二叉树题单(1)

层序遍历相关

102 二叉树的层序遍历

class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>> res;
        if(root == nullptr) return res;
        queue<TreeNode*> q;
        q.push(root);
        while(q.size())
        {
            int siz = q.size();
            vector<int> vec(siz);
            for(int i = 0 ; i < siz ; i ++)
            {
                TreeNode* p = q.front();
                q.pop();
                vec[i] = p->val;
                if(p->left) q.push(p->left);
                if(p->right) q.push(p->right);
            }
            res.push_back(vec);
        }
        return res;
    }
};

107 二叉树的层序遍历II

1.把之前做过的 102 题的层序遍历拿出来
2.在 return 之前加一句 reverse(ans.begin(), ans.end());
3.提交,通过
美好的一天从现在开始(

class Solution {
public:
    vector<vector<int>> levelOrderBottom(TreeNode* root) {
        vector<vector<int>> res;
        if(root == nullptr) return res;
        queue<TreeNode*> q;
        q.push(root);
        while(q.size())
        {
            int siz = q.size();
            vector<int> vec(siz);
            for(int i = 0 ; i < siz ; i ++)
            {
                TreeNode* p = q.front();
                q.pop();
                vec[i] = p->val;
                if(p->left) q.push(p->left);
                if(p->right) q.push(p->right);
            }
            res.push_back(vec);
        }
        reverse(res.begin(),res.end());
        return res;
    }
};

199 二叉树的右视图

记录每层的最后一个节点即可

class Solution {
public:
    vector<int> rightSideView(TreeNode* root) {
        vector<int> res;
        if(root == nullptr) return res;
        queue<TreeNode*> q;
        q.push(root);
        while(q.size())
        {
            int siz = q.size();
            while(siz--)
            {
                TreeNode* p = q.front();
                q.pop();
                if(p->left) q.push(p->left);
                if(p->right) q.push(p->right);
                if(siz == 0) res.push_back(p->val);
            }
        }
        return res;
    }
};

637 二叉树的层序遍历

模板,不解释

class Solution {
public:
    vector<double> averageOfLevels(TreeNode* root) {
        vector<double> res;
        if(root == nullptr) return res;
        queue<TreeNode*> q;
        q.push(root);
        while(q.size())
        {
            int siz = q.size();
            double ave = 0;
            for(int i = 0 ; i < siz ; i ++)
            {
                TreeNode* p = q.front();
                q.pop();
                ave += (double)p->val;
                if(p->left) q.push(p->left);
                if(p->right) q.push(p->right);
            }
            ave /= siz;
            res.push_back(ave);
        }
        return res;
    }
};

429 N叉树的层序遍历

更一般的情况,思路没有变

class Solution {
public:
    vector<vector<int>> levelOrder(Node* root) {
        vector<vector<int>> res;
        queue<Node*>q;
        if(root == nullptr) return res;
        q.push(root);
        while(q.size())
        {
            int siz = q.size();
            vector<int> vec(siz);
            for(int i = 0 ; i < siz ; i ++)
            {
                Node* p = q.front();
                q.pop();
                vec[i] = p->val;
                for(Node* ch : p->children)
                {
                    if(ch != nullptr) q.push(ch);
                }
            }
            res.push_back(vec);
        }
        return res;
    }
};

二叉树的深度

429 二叉树的最大深度

深搜然后随时更新答案即可

class Solution {
public:
    void dfs(TreeNode* root,int dep,int& maxdep)
    {
        if(root == nullptr) return;
        maxdep = max(maxdep,dep);
        dfs(root->left,dep+1,maxdep);
        dfs(root->right,dep+1,maxdep);
    }

    int maxDepth(TreeNode* root) {
        int ans = 0;
        dfs(root,1,ans);
        return ans;
    }
};

111 二叉树的最小深度

深搜即可

class Solution {
public:
    void dfs(TreeNode* root,int dep,int& mindep)
    {
        if(root == nullptr) return;
        if(!root -> left && !root -> right) mindep = min(dep,mindep);
        dfs(root->left,dep+1,mindep); 
        dfs(root->right,dep+1,mindep);
    }
    int minDepth(TreeNode* root) {
        int ans = 1e9;
        if(root == nullptr) return 0;
        dfs(root,1,ans);
        return ans;
    }
};

二叉树的LCA问题

236 二叉树的最近公共祖先

class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if(root == nullptr || root == p || root == q) return root;
        TreeNode *left = lowestCommonAncestor(root->left, p, q);
        TreeNode *right = lowestCommonAncestor(root->right, p, q);
        if(left == nullptr) return right;
        if(right == nullptr) return left;
        return root;
    }
};
posted @ 2025-06-15 11:04  _P_D_X  阅读(23)  评论(0)    收藏  举报