尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

二叉树专题

二叉树专题
📅 发布时间:2026/6/20 1:42:54

题型:二叉树

力扣94题  二叉树的中序遍历

class Solution {
public:
    void traversal(TreeNode *cur,vector<int>&vec){
        if(cur==nullptr) return;
        traversal(cur->left,vec);
        vec.push_back(cur->val);
        traversal(cur->right,vec);
    }
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int>result;
        traversal(root,result);
        return result;
    }
};
 
力扣102题  二叉树的层序遍历
class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        queue<TreeNode*>que;
        if(root!=nullptr) que.push(root);
        vector<vector<int>>result;
        while(!que.empty()){
            int size = que.size();
            vector<int>vec;
            for(int i=0;i<size;i++){
                TreeNode *node = que.front();
                que.pop();
                vec.push_back(node->val);
                if(node->left) que.push(node->left);
                if(node->right) que.push(node->right);
            }
            result.push_back(vec);
        }
        return result;

    }
};
 
力扣226题 翻转二叉树
递归三部曲
1.确定递归函数的参数和返回值
TreeNode *invertTree(TreeNode* root)
2.确定终止条件
if(root==nullptr) return root;
3.确定单层递归的逻辑
 
class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if(root==nullptr){
            return nullptr;
        }
        TreeNode *left = invertTree(root->left);
        TreeNode *right = invertTree(root->right);
        root->left = right;
        root->right = left;
        return root;
    }
};
 
力扣101题  对称二叉树
1.确定递归函数的参数和返回值
比较的是根节点的两个子树是否是相互翻转的,从而判断这个树是不是对称树,所以要比较的是两棵树
返回值是bool类型
bool  compare(TreeNode *left,TreeNode *right)
2.确定终止条件
节点为空的情况有:
左节点为空,右节点不为空,不对称,return false
左不为空,右为空,不对称,return false
左右不为空,对称,返回true
3.左右都不为空,比较节点数值,不相同就return false。
 if(left==nullptr && right !=nullptr) return false;
        else if(left!=nullptr && right==nullptr) return false;
        else if(left==nullptr && right==nullptr) return true;
        else if(left->val!=right->val) return false;
3.确定单层递归的逻辑
(1)比较二叉树外侧是否堆成:传入的是左节点的左孩子,右节点的右孩子
(2)比较内侧是否对称,传入左节点的右孩子,右节点的左孩子
(3)如果左右都对称就返回true,有一侧不对称就返回false。
bool outside = compare(left->left,right->right);
        bool inside = compare(left->right,right->left);
        bool isSame = outside && inside;
        return isSame;
 
 
class Solution {
public:
    bool compare(TreeNode *left,TreeNode *right){
        if(left==nullptr && right !=nullptr) return false;
        else if(left!=nullptr && right==nullptr) return false;
        else if(left==nullptr && right==nullptr) return true;
        else if(left->val!=right->val) return false;

        bool outside = compare(left->left,right->right);
        bool inside = compare(left->right,right->left);
        bool isSame = outside && inside;
        return isSame;
    }
    bool isSymmetric(TreeNode* root) {
        if(root==nullptr) return true;
        return compare(root->left,root->right);
    }
};
 
 
力扣 104题  二叉树的最大深度
先用后序遍历(左右中)来计算树的高度
1.确定递归函数的参数和返回值
int getdepth(TreeNode *node)
2.确定终止条件:如果为空节点的话,就返回0,表示高度为0
if(node==NULL) return 0;
3.确定单层递归的逻辑:先求它的左子树的深度,再求右子树的深度,最后取左右深度最大的数值再+1就是目前节点为根节点的树的深度。
        int leftdepth = getdepth(node->left);
        int rightdepth = getdepth(node->right);
        int depth = 1+max(leftdepth,rightdepth);
        return depth;
 
class Solution {
public:
    int getdepth(TreeNode *node){
        if(node==nullptr) return 0;
        int leftdepth = getdepth(node->left);
        int rightdepth = getdepth(node->right);
        int depth = 1+max(leftdepth,rightdepth);
        return depth;
    }
    int maxDepth(TreeNode* root) {
        return getdepth(root);
    }
};
 
力扣 617题  合并二叉树
一定要定义一个结点,然后再使用递归合并。思路和求最大深度有关系
class Solution {
public:
    TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
        if(root1==nullptr){
            return root2;
        }
        if(root2==nullptr){
            return root1;
        }
        TreeNode *root = new TreeNode(0);
        root->val = root1->val+root2->val;
        root->left = mergeTrees(root1->left,root2->left);
        root->right = mergeTrees(root1->right,root2->right);
        return root;
    }
};
 
力扣543题  二叉树的直径
遍历整个二叉树,求出每个节点的直径即左右子树深度相加,然后求出所有直径的最大值,因为节点本身是父节点的子树,所以返回值是当前节点的深度。
 
class Solution {
public:
    int maxDepth(TreeNode *root,int &ans){
        if(!root) return 0;
        int left = maxDepth(root->left,ans);
        int right = maxDepth(root->right,ans);
        ans = max(ans,left+right);
        return max(left,right)+1;
    }
    int diameterOfBinaryTree(TreeNode* root) {
        int ans = 0;
        maxDepth(root,ans);
        return ans;
    }
};
 
力扣98题  验证二叉搜索树
通过中序遍历下二叉树的搜索节点的数值判断有序序列
判断一个序列是否是有序的。
class Solution {
public:
    vector<int>vec;
    void traversal(TreeNode *root){
        if(root==nullptr){
            return;
        }
        traversal(root->left);
        vec.push_back(root->val);
        traversal(root->right);
    }
    bool isValidBST(TreeNode* root) {
        vec.clear();
        traversal(root);
        for(int i=1;i<vec.size();i++){
            if(vec[i-1]>=vec[i]) return false;
        }
        return true;
    }
};
 
 
力扣 105题  从前序与中序遍历序列构造二叉树
 
 
 
 
 
 
 
 
 
 
力扣 114题  二叉树展开链表
 
 
 
 
 
 
 
 
 
力扣 124题 二叉树中最大路径和
递归计算左子节点的最大贡献值,只有在最大贡献值>0时,才会被选取
//当前节点的最大路径和 = 该节点的值+该节点的左右子节点的最大贡献值
//返回节点的最大贡献值(节点值+其子节点中的最大贡献值)
class Solution {
public:
    int maxSum = INT_MIN;

    int maxGain(TreeNode *node){
        if(!node){
            return 0;
        }

        int leftGain = max(maxGain(node->left),0);
        int rightGain = max(maxGain(node->right,0);

        int priceNewpath = node->val + leftGain+rightGain;

        maxSum = max(maxSum,priceNewpath);

        return node->val + leftGain + rightGain;
    }

    int maxPathSum(TreeNode* root) {
        maxGain(root);
        return maxSum;
    }
};
 
 
力扣 208题  实现前缀树(考得不多,不必深究)
 
class TrieNode {
public:
    vector<TrieNode*> children;
    bool isWord;
    TrieNode() : isWord(false), children(26, nullptr) {
    }
    ~TrieNode() {
        for (auto& c : children)
            delete c;
    }
};

class Trie {
public:
    /** Initialize your data structure here. */
    Trie() {
        root = new TrieNode();
    }
   
    /** Inserts a word into the trie. */
    void insert(string word) {
        TrieNode* p = root;
        for (char a : word) {
            int i = a - 'a';
            if (!p->children[i])
                p->children[i] = new TrieNode();
            p = p->children[i];
        }
        p->isWord = true;
    }
   
    /** Returns if the word is in the trie. */
    bool search(string word) {
        TrieNode* p = root;
        for (char a : word) {
            int i = a - 'a';
            if (!p->children[i])
                return false;
            p = p->children[i];
        }
        return p->isWord;
    }
   
    /** Returns if there is any word in the trie that starts with the given prefix. */
    bool startsWith(string prefix) {
        TrieNode* p = root;
        for (char a : prefix) {
            int i = a - 'a';
            if (!p->children[i])
                return false;
            p = p->children[i];
        }
        return true;
    }
private:
    TrieNode* root;
};
 
力扣 236题  二叉树的最近公共祖先
 
 
 
 
 力扣 538题  把二叉搜索树转换为累加树
 
 
 

相关新闻

  • Kettle: pentaho-server-9.4登录问题
  • Win11/Win10/Office 永久激活
  • IvorySQL文档共建计划第一期!提 PR,提 Issue,赢取 Beats 耳机、机械键盘、书籍等多重好礼!

最新新闻

  • Page Assist终极指南:让本地AI模型成为你的网页浏览智能伴侣
  • 2026滨州漏水检测维修精选优质服务商TOP5推荐!卫生间漏水/厨房漏水/屋顶天花板漏水/阳台漏水/地下室漏水防水补漏检测维修-正规防水补漏公司优选口碑榜测评推荐 - 即刻修防水
  • Windows系统文件msvcp100d.dll丢失找不到问题解决
  • 国产大模型GLM-5.2登顶编程设计双冠王
  • Elvin 新手快速入门与实战指南
  • MC9S08AC60 BDC与DBG调试模块深度解析:从单线通信到非侵入式追踪

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号