C++: 二叉树进阶面试题

news2024/9/28 1:25:21

做每件事之前都心存诚意, 就会事半功倍.

目录

  • 前言
  • 1. 根据二叉树创建字符串
  • 2. 二叉树的层序遍历Ⅰ
  • 3. 二叉树的层序遍历Ⅱ
  • 4. 二叉树的最近公共祖先
  • 5. 二叉搜索树与双向链表
  • 6. 根据一棵树的前序遍历与中序遍历构造二叉树
  • 7. 根据一棵树的中序遍历与后序遍历构造二叉树
  • 8. 二叉树的前序遍历,非递归迭代实现
  • 9. 二叉树中序遍历 ,非递归迭代实现
  • 10. 二叉树的后序遍历 ,非递归迭代实现

前言

一些面试中可能会遇到的二叉树的进阶题目, 这些题目我们也需要进行掌握.

博客主页: 酷酷学!!!

更多好文, 持续关注


正文开始

1. 根据二叉树创建字符串

题目链接: 根据二叉树创建字符串

题目描述:

在这里插入图片描述
题目思路:

根据前序遍历创建二叉树, 再递归子树之前需要加括号, 但是题目要求省略不必要的括号, 通过观察可发现

  • 左右子树都为空, 省略括号
  • 右子树为空,省略括号
  • 左为空, 右不为空, 不能省略括号

每次递归之前加上条件即可, 不要忘记将整型转化为字符串, 字符串不能直接相加整型数据

题目代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    string tree2str(TreeNode* root) {
        string str;
        if(root == nullptr)
            return str;

        str+= to_string(root->val);

//两个都为空就省略括号
        if(root->left || root->right)
        {
            str+='(';
            str+=tree2str(root->left);
            str+=')';
        }

//右子树存在则都要括号
        if(root->right)
        {
            str+='(';
            str+=tree2str(root->right);
            str+=')';
        }

        return str;
    }
};

2. 二叉树的层序遍历Ⅰ

题目链接: 二叉树的层序遍历Ⅰ

题目描述:

在这里插入图片描述

题目思路:

我们在层序遍历过程中,增加一个levelSize,记录每层的数据个数,树不为空的情况下,第1层levelSize=1,循环控制,第1层出完了,第2层就都进队列了,队列中size就是第2层的数据个数。以此内推,假设levelSize为第n层的数据个数,因为层序遍历思想为当前层结点出队列,带入下一层结点(也就是子结点),循环控制第n层数据出完了,那么第n+1结点都进队列了,队列size,就是下⼀层的levelSize。

题目代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>> vv;
        queue<TreeNode*> q;
        int levelsize = 1;
        if(root == nullptr) return vv;
        q.push(root);
        while(levelsize)
        {
            vector<int> v;
            while(levelsize--)
            {
                TreeNode* front = q.front();
                v.push_back(front->val);
                if(front->left) q.push(front->left);
                if(front->right) q.push(front->right);
                q.pop();
            }
            vv.push_back(v);
            levelsize = q.size();
        }
        return vv;
    }
};

3. 二叉树的层序遍历Ⅱ

题目链接: 二叉树的层序遍历Ⅱ

题目描述:

在这里插入图片描述

题目思路:

107的第二个题目,思路跟上题102⼀样,只⼆维数组逆置⼀下就可以得到结果。

题目代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<vector<int>> levelOrderBottom(TreeNode* root) {
        vector<vector<int>> vv; int levelsize = 0;
        queue<TreeNode*> q;
        if(root)
        {
            q.push(root);
            levelsize = 1;
        }
        while(levelsize>0)
        {
            vector<int> v;
            while(levelsize--)
            {
                TreeNode* front = q.front();
                q.pop();
                v.push_back(front->val);
                if(front->left) q.push(front->left);
                if(front->right) q.push(front->right);
            }
            levelsize = q.size();
            vv.push_back(v);
        }
        reverse(vv.begin(),vv.end());
        return vv;
    }
};

4. 二叉树的最近公共祖先

题目链接: 二叉树的最近公共祖先

题目描述:

在这里插入图片描述

题目思路:

在这里插入图片描述

思路1:仔细观察⼀下,两个结点,最近公共祖先的特征就是⼀个结点在最近公共祖先的左边,⼀个结点在最近公共祖先的右边。⽐如6和4的公共祖先有5和3,但是只有最近公共祖先5满⾜6在左边,4在右边。

思路2:如果能求出两个结点到根的路径,那么就可以转换为链表相交问题。如:6到根3的路径为6->5->3,4到根3的路径为4->2->5->3,那么看做两个链表找交点,交点5就是最近公共祖先。

思路二时间复杂度更好一点,但是空间复杂度大一点

题目代码:

思路一:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    bool IsInTree(TreeNode* t,TreeNode* x)
    {
        if(t == nullptr)
            return false;
        return t == x || IsInTree(t->left,x) || IsInTree(t->right,x);
    }
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if(root == nullptr)
            return nullptr;
        if(root == p || root == q)
            return root;
        //自此开始要么都在左,要么都在右
        bool pInleft = IsInTree(root->left,p);
        bool pInright = !pInleft;
        bool qInleft = IsInTree(root->left,q);
        bool qInright = !qInleft;

        if((qInleft&&pInright) || (qInright&&pInleft)) return root;
        else if(pInleft && qInleft) return lowestCommonAncestor(root->left,p,q);
        else return lowestCommonAncestor(root->right,p,q);
    }
};

思路二:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:

    bool ancestor(TreeNode* root,TreeNode* node,stack<TreeNode*>& s)
    {
        if(root == nullptr) return false;
        s.push(root);
        if(root == node) return true;
        if(ancestor(root->left,node,s)) return true;
        if(ancestor(root->right,node,s)) return true;
        s.pop();
        return false;
    }

    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        stack<TreeNode*> pstack;
        stack<TreeNode*> qstack;
        ancestor(root,p,pstack);
        ancestor(root,q,qstack);
        while(pstack.size()>qstack.size())
        {
            pstack.pop();
        }
        while(qstack.size()>pstack.size())
        {
            qstack.pop();
        }
        while(qstack.top()!=pstack.top())
        {
            pstack.pop();
            qstack.pop();
        }
        return qstack.top();
    }
};

5. 二叉搜索树与双向链表

题目链接: 二叉搜索树与双向链表

题目描述:

在这里插入图片描述

题目思路:

搜索⼆叉树⾛中序是有序的,本题⽬要求原地修改,也就是不能创建新的结点。

思路1:中序遍历搜索⼆叉树,遍历顺序是有序的,将⼆叉树的结点指针放到⼀个vector中,再把前后结点的链接关系进⾏修改。这个思路最简单,但是需要消耗O(N)的空间复杂度。

思路2:依旧中序遍历搜索⼆叉树,遍历顺序是有序的,遍历过程中修改左指针为前驱和右指针为后继指针。记录⼀个cur和prev,cur为当前中序遍历到的结点,prev为上⼀个中序遍历的结点,cur->left指向prev,cur->right⽆法指向中序下⼀个,因为不知道中序下⼀个是谁,但是prev->right指向cur;也就是说每个结点的左是在中遍历到当前结点时修改指向前驱的,但是当前结点的右,是在遍历到下⼀个结点时,修改指向后继的。

代码如下:

/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
public:
	void InOrderConvert(TreeNode* cur,TreeNode*& prev)
	{
		if(cur==nullptr) return;
		InOrderConvert(cur->left,prev);
		cur->left = prev;
		if(prev)
			prev->right = cur;
		prev = cur;
		InOrderConvert(cur->right,prev);
	}

    TreeNode* Convert(TreeNode* pRootOfTree) 
	{
        if(pRootOfTree==nullptr) 
			return nullptr;
		TreeNode* prev = nullptr;
		InOrderConvert(pRootOfTree,prev);
		TreeNode* head = pRootOfTree;
		while(head->left)
		{
			head = head->left;
		}
		return head;
    }
};

6. 根据一棵树的前序遍历与中序遍历构造二叉树

题目链接: 根据一棵树的前序遍历与中序遍历构造二叉树

题目描述:

在这里插入图片描述
题目思路:

前序的⽅式构建树,前序确定当前构建树的根,根分割中序的左⼦树和右⼦树,再分别递归构建左⼦树和右⼦树。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode* build(vector<int>& preorder,vector<int> inorder,int& prei,int inbegin,int inend)
    {
        if(inbegin>inend) return nullptr;
        //前序确定根
        TreeNode* root = new TreeNode(preorder[prei]);
        //中序分割左右子树
        int rooti = inbegin;
        while(rooti <= inend)
        {
            if(preorder[prei] == inorder[rooti])
                break;
            else
                rooti++;
        }
        prei++;
        root->left = build(preorder,inorder,prei,inbegin,rooti-1);
        root->right = build(preorder,inorder,prei,rooti+1,inend);
        return root;
    }
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        int i = 0;
        return build(preorder,inorder,i,0,inorder.size()-1);
    }
};

7. 根据一棵树的中序遍历与后序遍历构造二叉树

题目链接: 根据一棵树的中序遍历与后序遍历构造二叉树

题目描述:

在这里插入图片描述
题目思路:

此题跟第六题差不多, 区别在于后续来确定根, 与上题相反, 且后续遍历的顺序是 左 右 根, 所以第二次取到是右子树的根, 故创建完根之后, 先创建右子树, 再创建根

题目代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode* build(vector<int>& inorder, vector<int>& postorder,int& post,int inbegin,int inend)
    {
        if(inbegin>inend) return nullptr;
        TreeNode* newnode = new TreeNode(postorder[post]);
        int rooti = inbegin;
        while(rooti<=inend)
        {
            if(postorder[post] == inorder[rooti])
                break;
            else
                rooti++;
        }
        post--;
        newnode->right = build(inorder,postorder,post,rooti+1,inend);
        newnode->left = build(inorder,postorder,post,inbegin,rooti-1);
        
        return newnode;
    }
    TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
        int post = postorder.size()-1;
        return build(inorder,postorder,post,0,inorder.size()-1);
    }
};

8. 二叉树的前序遍历,非递归迭代实现

题目链接: 二叉树的前序遍历

题目描述:

在这里插入图片描述

题目思路:

在二叉树初阶刷题阶段, 我们已经实现了前序遍历的递归实现, 但是递归层数多会造成栈溢出, 所以对于非递归的实现, 我们也要掌握, 其实原理也很简单, 就是模拟递归实现的过程, 先创建一个栈, 用于记录根模拟递归的过程, 遍历左节点, 遍历之前先入栈, 此题前序遍历, 所以直接将此节点的val也插入到vector中, 直到遍历到nullptr,次时说明左子树已全部遍历完, 接着去栈顶元素, 出栈顶元素, 并且将栈顶元素的right赋值给cur,进行下一次的循环遍历, 直至栈为空, 结束的条件cur不为空说明还有右子树需要遍历, 栈不为空说明还有左子树需要遍历右子树.

代码实现:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
//非递归前序遍历
    vector<int> preorderTraversal(TreeNode* root) {
        vector<int> v;
        TreeNode* cur = root;
        stack<TreeNode*> snode;
        while(cur || !snode.empty())
        {
            while(cur)
            {
                v.push_back(cur->val);
                snode.push(cur);
                cur = cur->left;
            }
            TreeNode* top = snode.top();
            snode.pop();
            cur = top->right;
        }
        return v;
    }
};

9. 二叉树中序遍历 ,非递归迭代实现

题目连接: 二叉树的中序遍历

题目描述:

在这里插入图片描述

题目思路:

本题要求中序遍历, 基本思路与前序遍历差不多, 模拟递归的实现过程, 只不过, 本次我们左子树入栈不要进行访问, 而是遍历到左子树为nullptr时, 回退的过程在进行访问, 然后在访问右子树, 右子树也是一样的操作, 遇到不为空先不访问, 先入栈,直到栈为空时, 在进行访问, 此时访问的效果就达到 左 根 右.

代码实现:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> v;
        stack<TreeNode*> snode;
        TreeNode* cur = root;
        while(cur || !snode.empty())
        {
            while(cur)
            {
                snode.push(cur);
                cur = cur->left;
            }
            TreeNode* top = snode.top();
            v.push_back(top->val);
            cur = top->right;
            snode.pop();
        }
        return v;
    }
};

10. 二叉树的后序遍历 ,非递归迭代实现

题目连接: 二叉数的后序遍历

题目描述:

在这里插入图片描述

题目思路:

还是双循环模拟递归的实现过程, 遇到节点先不放问, 先入栈, 但是我们需要先访问左, 在访问右, 最后访问根, 所以左子树遍历到空之后, 取栈顶元素访问右子树, 如果右子树为根的情况我们才能访问, 访问完之后, 出栈, 在取栈顶元素, 问题就来了, 这时又会取到栈顶元素的右子树, 那我们是否还需要再进去访问呢, 如果访问过了我们就不要访问了, 直接访问此节点, 没访问过在进行访问, 不然会陷入死循环, 这是我们额为创建一个指针来记录上一次出栈的节点, 也就是上一次访问过的节点, 如果为top->right那么就不用进入循环了, 直接pop并直接访问该节点即可, 通过模拟我们可以发现, 其实不管怎么样, 后序遍历一定是先访问的是右子树为空的那个节点.

代码实现:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<int> postorderTraversal(TreeNode* root) {
        stack<TreeNode*> snode;
        TreeNode* cur = root;
        TreeNode* prev = nullptr;
        vector<int> v;
        while(cur || !snode.empty())
        {
            while(cur)
            {
                snode.push(cur);
                cur = cur->left;
            }
            TreeNode* top = snode.top();
            if(top->right == nullptr || prev == top->right)
            {
                v.push_back(top->val);
                prev = top;
                snode.pop();
            }
            else
            {
                cur = top->right;
            }
        }
        return v;
    }
};

完 这些进阶题目我们也需要进行掌握, 这样才能运筹帷幄, 创作不易 感谢点赞关注!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2137542.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AMD FSR 4已秘密开发1年 支持AI帧生成

作为当今三大超分技术之一&#xff0c;AMD FSR曾经在第二代一度紧紧咬住NVIDIA DLSS&#xff0c;但是进入第三代之后反而差距拉大了&#xff0c;尤其是帧生成技术差了很多。AMD高级副总裁、计算与图形业务事业部总经理Jack Huynh近日透露&#xff0c;FSR 2/3并不是AMD真正想要的…

学习使用在windows系统上安装vue前端框架以及环境配置图文教程

学习使用在windows系统上安装vue前端框架以及环境配置图文教程 1、安装nodejs2、安装vue3、安装Vue-cli脚手架4、安装高版本5、创建vue项目6、启动项目7、配置开发环境8、发布项目 1、安装nodejs 点我查看教程 2、安装vue winR&#xff0c;打开cmd cnpm install vue -g表示安…

Golang数据流处理:掌握Reader和Writer接口的技巧

Golang数据流处理&#xff1a;掌握Reader和Writer接口的技巧 引言理解Reader和Writer接口Reader接口的定义和基本方法Writer接口的定义和基本方法 Reader接口的深入探讨Reader接口的实现示例使用io.Reader读取文件内容从网络连接中读取数据 常用Reader类型及其应用场景strings.…

vue之 package.json和package-lock.json

一、package.json 定义了当前项目所需要引用的各个模块&#xff0c;可以手工修改配置&#xff0c;也可以删除后&#xff0c;使用npm init命令重新自动生成。 但是该文件只锁定大版本号&#xff0c;也就是版本号的第一位&#xff0c;所以你会发现两个文件中同一个包的版本号不一…

【Pycharm】Pycharm创建Django提示pip版本需要升级

目录 1、现象 2、分析 3、本质 前言&#xff1a;经常使用pycharm创建django、flask等项目时候提示pip版本需要升级&#xff0c;解决方案 1、现象 使用Pycharm创建Django项目提示安装Django超时&#xff0c;报错建议pip升级22升级到24 2、分析 之前使用命令升级了pip到了24…

数据库连接池与Druid【后端 16】

数据库连接池与Druid 在现代软件开发中&#xff0c;数据库连接池作为一种关键的技术手段&#xff0c;被广泛用于提升数据库访问的效率和稳定性。本文将深入探讨数据库连接池的概念、常见实现&#xff0c;并重点介绍我国阿里集团开源的数据库连接池——Druid&#xff0c;以及如何…

五星级可视化页面(24):管线管路流程图可视化大屏。

本期分享管线、管路方向可视化大屏&#xff0c;一般用在供水、能源、交通等领域。

本地部署轻量级web开发框架Flask结合内网穿透公网环境访问管理界面

文章目录 1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 本篇文章主要讲解如何在本地安装Flask&#xff0c;以及如何将其web界面发布到公网进行远程访问。 Flask是目前十分流行的web框架&#xff0c;采用Python编程语…

[产品管理-16]:NPDP新产品开发 - 14 - 产品创新流程 - 产品创新流程模型比较:门径、IPD、精益生产、敏捷、系统工程、设计思维、精益创业

目录 一、精益开发与敏捷开发的比较 1、核心理念 2、实践方式 3、应用场景 4、总结 二、门径流程 VS 敏捷方法 1、定义与特点 门径管理流程 敏捷方法 2、应用场景 3、比较 4、总结 三、集成产品开发 VS 系统工程 VS 设计思维 1、集成产品开发&#xff08;IPD&…

LineageOS源码下载和编译(Xiaomi Mi 6X,wayne)

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 源码下载 LineageOS官网&#xff1a;https://lineageos.org/ LineageOS源码 github 地址&#xff1a;https://github.com/LineageOS/android LineageOS源码…

在 Java 中实现 Kafka Producer 的单例模式

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storm…

解决 Kylin OS 提示软件包 powerconnect 需要重新安装,但是我无法找到相应的安装文件

解决 Kylin OS 提示软件包 powerconnect 需要重新安装&#xff0c;但是我无法找到相应的安装文件 1、问题现象2、解决办法 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、问题现象 sudo apt-get install -y seahorse生物识别认证 按Q或…

Android 11 FileProvider的使用和限制

概述&#xff1a; 从Android 7开始&#xff0c;将不允许在app之间&#xff0c;使用file uri,即file://的方式&#xff0c;传递一个file&#xff0c;否则会抛出异常&#xff1a;FileUriExposedException &#xff0c;其解决方案&#xff0c;就是使用FileProvider&#xff0c;用c…

【Rust练习】14.流程控制

练习题来自&#xff1a;https://practice-zh.course.rs/flow-control.html 1 // 填空 fn main() {let n 5;if n < 0 {println!("{} is negative", n);} __ n > 0 {println!("{} is positive", n);} __ {println!("{} is zero", n);} } …

初识Linux · 进程(3)

目录 前言&#xff1a; 进程的创建 前言&#xff1a; 继上文介绍了着重介绍了进程的内部属性&#xff0c;以及在操作系统层面进程如何被组织起来的&#xff0c;如何调用系统接口&#xff0c;有关task_struct&#xff0c;进程的部分理解等&#xff0c;今天&#xff0c;我们就…

医疗报销|基于springBoot的医疗报销系统设计与实现(附项目源码+论文+数据库)

私信或留言即免费送开题报告和任务书&#xff08;可指定任意题目&#xff09; 目录 一、摘要 二、相关技术 三、系统设计 四、数据库设计 五、核心代码 六、论文参考 七、源码获取 一、摘要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#x…

知识竞赛活动舞台搭建要多少钱

每次举办活动&#xff0c;舞台搭建总是让人头疼的一部分&#xff0c;尤其是费用问题。今天就来揭开活动舞台搭建费用的神秘面纱。 活动舞台搭建的费用主要包括舞台结构、设备、音响、灯光、舞美装饰等各方面的成本。具体来说&#xff1a; 1.舞台结构&#xff1a;包括舞台平台…

vscode 中 python 代码跳转不生效 ctrl加单击不跳转

目录 网友的解决方法&#xff1a; 我的解决方法 vscode 中 python 代码跳转不生效 ctrl加单击不跳转 网友的解决方法&#xff1a; vscode 中 python 代码跳转不生效_vscode python 代码无法跳转-CSDN博客 解决方法 后来发现vs code初次远程连接服务器时&#xff0c;需要…

带你0到1之QT编程:十一、掌握Containers容器艺术,一网打尽开发利器

此为QT编程的第十一谈&#xff01;关注我&#xff0c;带你快速学习QT编程的学习路线&#xff01; 每一篇的技术点都是很很重要&#xff01;很重要&#xff01;很重要&#xff01;但不冗余&#xff01; 我们通常采取总-分-总和生活化的讲解方式来阐述一个知识点&#xff01; …

C++类与对象(二)

目录 1.类的6个默认成员函数 2..构造函数 2.1概念 2.2 特征 3.析构函数 3.1 概念 3.2 特性 4.拷贝构造函数 4.1 概念 4.2 特征 5.赋值运算符重载函数 5.1 运算符重载&#xff08;是否重载这个运算符是看这个运算符对这个类是否有意义&#xff09; 5.2 赋值运算符重…