二叉树相关题目

news2024/11/17 2:36:28

1.中序遍历和后序遍历构建二叉树;

 TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) 
    {
        //判空
        if(postorder.size()== 0) return nullptr;

        //找到后序的最后元素就是根节点以及栈来存放数据
        auto root=new TreeNode(postorder[postorder.size()-1]);
        auto s=stack<TreeNode*>();

        //入栈
        s.push(root);
        //前序最后元素比较
        int inorderIndex=inorder.size()-1;
        //从最后第二个元素开始比较
        for(int i=int(postorder.size())-2;i>=0;i--)
        {
            //倒数第二个元素开始,排序node结点。
              int postorderVal=postorder[i];
              auto node=s.top();

             //如果不等于就是插入到右节点;
              if(node->val != inorder[inorderIndex])
              {
                  node->right=new TreeNode(postorderVal);
                  s.push(node->right);
              }
              //相等,将栈中元素作为左结点。
              else
              {
                  while(!s.empty() && s.top()->val==inorder[inorderIndex])
                  {
                    node=s.top();
                    s.pop();
                    inorderIndex--;
                  }
                  node->left=new TreeNode(postorderVal);
                  s.push(node->left);
              }
        }
        //多画图总结分析。
        return root;
    }

1.前序遍历和中序遍历构建二叉树;

 TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) 
    {
        if(preorder.size()==0) return nullptr;

        TreeNode* root= new TreeNode(preorder[0]);
        stack<TreeNode*> stk;
        stk.push(root);
        int inorderIndex=0;
        
        for(int i=1;i<preorder.size();i++)
        {
            int preorderVal=preorder[i];
            TreeNode* node=stk.top();
            if(node->val != inorder[inorderIndex])
            {
                node->left=new TreeNode(preorderVal);
                stk.push(node->left);
            }
            else
            {
                while(!stk.empty() && stk.top()->val ==inorder[inorderIndex])
                {
                    node=stk.top();
                    stk.pop();
                    inorderIndex++;
                }
                node->right=new TreeNode(preorderVal);
                stk.push(node->right);
            }

        }
        return root;
    }

3.根据二叉树创建字符串;

 string tree2str(TreeNode* root) 
    {
       //为空直接返回;
       if(root == nullptr)
          return "";

       //左右都为空;返回root的值
       if(root->left == nullptr && root-> right == nullptr)
       {
           return to_string(root->val);
       }

       //左不为空,右边为空;root的值以及左节点的内容
       if(root->right == nullptr)
       {
           return to_string(root->val) + "(" + tree2str(root->left) + ")";
       }

       //最后就是左边为空,右边不为空的情况;左边也要加上();右边也要访问。
       return to_string(root->val) + "(" + tree2str(root->left) + ")(" + tree2str(root->right)+")";
    }

4.二叉搜索树与双向链表;

TreeNode* head=nullptr;
	TreeNode* pre=nullptr;

    TreeNode* Convert(TreeNode* pRootOfTree) 
	{
        if(pRootOfTree ==nullptr) return nullptr;

		Convert(pRootOfTree->left);

		if(pre == nullptr)
		{
			pre=pRootOfTree;
			head=pRootOfTree;
		}
		else
		{
			pre->right=pRootOfTree;
			pRootOfTree->left=pre;
			pre=pRootOfTree;
		}
		Convert(pRootOfTree->right);
		return head;
    }

5.二叉树的公共祖先:

 TreeNode* ans=nullptr;
    
    bool dfs(TreeNode* root,TreeNode* p,
  TreeNode* q)
  {
      //判空
      if(root == nullptr) return false;
      
      //左右子树看一下
      bool lson =dfs(root->left,p,q);
      bool rson =dfs(root->right,p,q);
      
      //标记ans返回结点
      if((lson && rson) || (root->val ==p->val || root->val == q->val) && (lson || rson))
      {
          ans=root;
      }
      
      //递归返回()
      return rson || lson || root->val ==p->val || root->val == q->val;
  }
    
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) 
    {
        dfs(root,p,q);
        return ans;
    }

6.二叉树的层序遍历:

vector<vector<int>> levelOrder(TreeNode* root) 
    {
       vector<vector<int>> ret;
       if(root == nullptr) return ret;

       queue<TreeNode*> q;
       q.push(root);
       while(!q.empty())
       {
          int currentLevelSize = q.size();
          ret.push_back(vector<int>());
          
          for(int i=1;i <= currentLevelSize;i++)
          {
             auto node=q.front();
             q.pop();
             ret.back().push_back(node->val);
             if(node->left) q.push(node->left);
             if(node->right) q.push(node->right);
          }
       }
       return ret;
    }

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

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

相关文章

Hadoop大数据应用:Linux 部署 MapReduce 与 Yarn

目录 一、实验 1.环境 2.Linux 部署 MapReduce 3.Linux 部署 Yarn 4.Linux 调用大数据集群分析数据 二、问题 1.hadoop 的启动和停止命令 2.HDFS 使用命令 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 主机架构软件版本IP备注hadoop NameNode &#xf…

基于单片机的指纹采集识别系统设计

目 录 摘 要 I Abstract II 引 言 3 1 硬件选择与设计 5 1.1 总体设计及方案选择 5 1.1.1主控单片机选择 5 1.1.2传感器模块选择 6 1.1.3显示器模块选择 6 1.2 系统总体设计 7 2 系统硬件电路设计 8 2.1 系统主电路设计 8 2.1.1 主体电路设计 8 2.1.2 单片机最小系统设计 8 2.…

python的函数与类的定义

目录 1.函数 1.函数的定义 2.输入参数与输出参数的类型 3.输入和输出多个参数 1.普通参数 2.含有任意数量的参数 3.关键字参数 4.普通参数与多个参数的结合 2.类 1.类的定义 2.类的实例化 3.继承 1.函数 1.函数的定义 def 函数名(输入参数): 文档字符串 函数体 …

ElasticSearch深度分页问题如何解决

文章目录 概述解决方法深度分页方式from size深度分页之scrollsearch_after 三种分页方式比较 概述 Elasticsearch 的深度分页问题是指在大数据集上进行大量分页查询时可能导致的性能下降和资源消耗增加的情况。这种情况通常发生在需要访问大量数据的情形下&#xff0c;比如用…

finalshell连接cetOS7卡顿(配置完静态IP后出现的问题)

检查后的原因是:ssh服务端在连接时自动检测dns环境是否一致&#xff0c;这里将此次检测关闭即可 解决方案如下: vi /etc/ssh/sshd_config(打开后一直回车键到最下边)找到DNS&#xff0c;改为useDNS no&#xff08;默认为#useDNSyes&#xff09; 修改后重启服务&#xff1a; sys…

基于Java+SpringBoot+vue+element实现前后端分离玩具商城系统

基于JavaSpringBootvueelement实现前后端分离玩具商城系统 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文…

Pytorch入门实战 P2-CIFAR10彩色图片识别

目录 一、前期准备 1、数据集CIFAR10 2、判断自己的设备&#xff0c;是否可以使用GPU运行。 3、下载数据集&#xff0c;划分好训练集和测试集 4、加载训练集、测试集 5、取一个批次查看下 6、数据可视化 二、搭建简单的CNN网络模型 三、训练模型 1、设置超参数 2、编…

【Vue2】slot 插槽全家桶

插槽-默认插槽 插槽的基本语法 组件内需要定制的结构部分&#xff0c;改用<slot></slot>占位使用组件时, <MyDialog></MyDialog>标签内部, 传入结构替换slot给插槽传入内容时&#xff0c;可以传入纯文本、html标签、组件 插槽-默认值 封装组件时&am…

Nginx的日志怎么看,在哪看,access.log日志内容详解

Nginx 的日志文件通常位于服务器的文件系统中&#xff0c;具体位置可能因配置而异。以下是查看 Nginx 日志的几种方法&#xff1a; 1、查看访问日志&#xff1a;在默认配置下&#xff0c;Nginx 的访问日志文件路径为 /var/log/nginx/access.log。您可以通过命令 sudo cat /var…

创新营销的新篇章:企业如何通过VR虚拟发布会提升品牌影响力

在数字化转型的浪潮中&#xff0c;VR虚拟发布会作为一种新兴的营销手段&#xff0c;正逐渐成为企业品牌推广和产品发布的重要选择。通过利用虚拟现实技术&#xff0c;企业能够在虚拟空间中举办发布会&#xff0c;为参与者提供沉浸式的体验。 一、创新体验&#xff1a;虚拟空间的…

linux系统对于docker容器的监控

容器监控 容器监控原生命令操作问题 容器监控三剑客CAdvisorInfluxDBGranfana compose编排监控工具新建目录创建CIG.yml文件启动docker-compose测试 容器监控 CAdvisorInfluxDBGranfana 原生命令 操作 docker stats问题 通过docker stats命令可以很方便的看到当前宿主机上所…

【黑马程序员】Python文件操作

文章目录 文件操作文件编码什么是编码为什么要使用编码 文件的读取openmodel常用的三种基础访问模式读操作相关方法 文件的写入注意代码示例 文件操作 文件编码 什么是编码 编码就是一种规则集合&#xff0c;记录了内容和二进制间进行互相转换的规则 最常用的是UTF-8编码 …

魔法手链(burnside+矩阵优化+dp acwing 3134)

题目&#xff1a;3134. 魔法手链 - AcWing题库 思路&#xff1a; 代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<string> #include<cstring> #include<cmath> #include<ctime> #include<algorithm> #i…

史上最全Spring教程,从零开始带你深入♂学习(三)—

减少数据处理量&#xff0c;提高查询效率 (一)使用Limit分页 –从第2个开始查询&#xff0c;每一页10个 select * from user limit 2,10 –从第0个开始查询&#xff0c;每一页10个 SELECT * from user limit 10; 领取资料 (二)使用Mybatis实现分页&#xff0c;核心SQL 1、编…

小文件问题及GlusterFS的瓶颈

01海量小文件存储的挑战 为了解决海量小文件的存储问题&#xff0c;必须采用分布式存储&#xff0c;目前分布式存储主要采用两种架构&#xff1a;集中式元数据管理架构和去中心化架构。 (1)集中式元数据架构&#xff1a; 典型的集中式元数据架构的分布式存储有GFS&#xff0…

一、NLP中的文本分类

目录 1.0 文本分类的应用场景 1.1 文本分类流程 ​编辑 1.2 判别式模型 1.3 生成式模型 1.4 评估 1.5 参考文献 NLP学习笔记系列&#xff0c;欢迎收藏交流&#xff1a; 零、自然语言处理开篇-CSDN博客 一、NLP中的文本分类-CSDN博客 二、NLP中的序列标注&#xff08;分…

413 Request Entity Too Large 问题如何解决

遇到“413 Request Entity Too Large”错误通常意味着你尝试上传或提交到服务器的数据量超过了服务器能够处理的限制。这个问题通常与Web服务器的配置相关&#xff0c;比如Nginx或Apache。这个问题出现在使用Nginx作为Web服务器的环境中。这里有几种解决方法&#xff1a; 1. 调…

openGauss学习笔记-242 openGauss性能调优-SQL调优-典型SQL调优点-SQL自诊断

文章目录 openGauss学习笔记-242 openGauss性能调优-SQL调优-典型SQL调优点-SQL自诊断242.1 SQL自诊断242.1.1 告警场景242.1.2 规格约束 openGauss学习笔记-242 openGauss性能调优-SQL调优-典型SQL调优点-SQL自诊断 SQL调优是一个不断分析与尝试的过程&#xff1a;试跑Query&…

流水账-20240314

目录 Linux系统删除文件后&#xff0c;磁盘大小没变化mysql事务和neo4j事务冲突误诊描述解决方法网上提供的方法重置Neo4j密码&#xff0c;成功解决问题高版本低版本 Linux系统删除文件后&#xff0c;磁盘大小没变化 lsof L1|grep 删除的文件名kill进程 mysql事务和neo4j事务…

面试题系列一之-css画三角形(原理解析)

用html写一个三角形的图标算是一个比较简单的,但是工作中用的还是比较多的&#xff0c;面试也可能会问&#xff0c;但了解背后的原理才能熟练使用 我们首先写一个div,设置边框 <body><div class"border"></div> </body> <style> .bo…