笔试面试题——二叉树进阶(二)

在这里插入图片描述


📘北尘_:个人主页

🌎个人专栏:《Linux操作系统》《经典算法试题 》《C++》 《数据结构与算法》

☀️走在路上,不忘来时的初心

文章目录

  • 一、二叉搜索树与双向链表
    • 1、题目讲解
    • 2、思路讲解+递归展开图
    • 3、代码实现
  • 二、从前序遍历和中序遍历中构建二叉树
    • 1、题目讲解
    • 2、思路讲解+递归展开图
    • 3、代码实现
  • 三、从中序遍历和后序遍历中构建二叉树
    • 1、题目讲解
    • 2、思路讲解
    • 3、代码实现



一、二叉搜索树与双向链表

1、题目讲解

在这里插入图片描述
在这里插入图片描述

2、思路讲解+递归展开图

在这里插入图片描述

在这里插入图片描述

3、代码实现

class Solution {
public:
	void _Convert(TreeNode* cur,TreeNode*& prev)
	{
		if(cur==nullptr)
			return;
		_Convert(cur->left,prev);
		cur->left=prev;
		if(prev)
		{
			prev->right=cur;
		}
		prev=cur;

		_Convert(cur->right,prev);
	}
    TreeNode* Convert(TreeNode* pRootOfTree) {
		TreeNode* cur=pRootOfTree,*prev=nullptr;
		 _Convert(cur,prev);

		TreeNode* root=pRootOfTree;
		while(root && root->left)
		{
			root=root->left;
		}
		return root;   
    }
};


二、从前序遍历和中序遍历中构建二叉树

1、题目讲解

在这里插入图片描述
在这里插入图片描述

2、思路讲解+递归展开图

在这里插入图片描述

在这里插入图片描述

3、代码实现

class Solution {
public:
    TreeNode* _buildTree(vector<int>& preorder, vector<int>& inorder,int& i,int begin,int end)
    {
        if(begin>end)
           return nullptr;
        int rooti=begin;
        while(rooti<=end)
        {
            if(preorder[i]==inorder[rooti])
               break;
            rooti++;
        }
        TreeNode* root=new TreeNode(preorder[i++]);
        root->left=_buildTree(preorder,inorder,i,begin,rooti-1);
        root->right=_buildTree(preorder,inorder,i,rooti+1,end);
        return root;

    }
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        int i=0;
        TreeNode* root=_buildTree(preorder,inorder,i,0,inorder.size()-1);
        return root;
    }
};

三、从中序遍历和后序遍历中构建二叉树

1、题目讲解

在这里插入图片描述
在这里插入图片描述

2、思路讲解

在这里插入图片描述

3、代码实现

class Solution {
public:
    TreeNode* _buildTree(vector<int>& inorder, vector<int>& postorder,
    int& i,int begin,int end)
    {
        if(begin>end)
            return nullptr;

        int rooti=begin;
        while(begin<=end)
        {
            if(postorder[i]==inorder[rooti])
                break;
            rooti++;
        }
        TreeNode* root=new TreeNode(postorder[i--]);
        root->right=_buildTree(inorder,postorder,i,rooti+1,end);
        root->left=_buildTree(inorder,postorder,i,begin,rooti-1);
        return root;
    }
    TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
        int i=postorder.size()-1;
        TreeNode* root=_buildTree(inorder,postorder,i,0,inorder.size()-1);
        return root;

    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Flutter轮播图Banner

使用插件&#xff1a;flutter_swiper 实现轮播图 pubspec.yaml 增加 &#xff1a;flutter_swiper : ^lastest_version 在项目文件夹下打开命令行执行&#xff1a;flutter packages get 安装插件 home_page.dart中使用swiper 程序运行:先启动虚拟设备后&#xff0c;执行命令f…

【征服redis16】收官-redis缓存一致性问题解决方案

今天我们来写redis最后一篇&#xff1a;redis作为缓存时如何与数据库实现数据一致的问题。 最近看redis看得有点麻了&#xff0c;这篇就简单描述吧 目录 1.什么是缓存与数据库一致性问题 1.1 缓存一致性的概念 1.2 缓存不一致的场景 2.缓存不一致的解决思路 1.什么是缓存…

Pandas数据重采样

数据重采样 时间数据由一个频率转换到另一个频率 降采样&#xff08;如D到M&#xff09;升采样&#xff08;如M到D&#xff09; 方法&#xff1a;调用resample 降采样举例 import matplotlib.pyplot as plt import numpy as np import pandas as pd import datetime as dtrng…

git内部原理

git内部原理 介绍目录结构说明 介绍 项目的本地仓库中&#xff0c;包含一个隐藏的.git目录&#xff0c;其不同的文件产生都源于git的各种不同命令造成&#xff0c;文件目录如下所示&#xff1a; 目录结构说明 上面最核心重要的为object目录&#xff0c;目录最主要有三个对象…

【好用的AI工具】推荐测试人在用的Kimi Chat

一、功能介绍 发网址链接文章解析PDF文件分析&#xff0c;可以整理分析文章丢简历、给出面试问题聊天等 Kimi Chat 二、对于测试人带来的帮助 2.1 面试问题总结 问题一&#xff1a;Session和Cookie的区别 seeion 和 cookie 是两种不同的数据存储机制&#xff0c;它们在Web开…

C++ 并发编程 | 线程的状态

一、线程的状态 1、线程的状态 C线程有五种不同的状态&#xff1a;创建、就绪、运行、阻塞、终止。掌握线程状态可帮助我们跟踪程序的执行过程&#xff0c;并解决潜在的竞态条件和死锁问题&#xff0c;掌握它对于编写可靠和高效的多线程应用程序至关重要。下面分别介绍这几种状…

利用Intersection Observer实现图片懒加载性能优化

Intersection Observer是浏览器所提供的一个 Javascript API&#xff0c;用于异步的检测目标元素以及祖先或者是顶级的文档视窗的交叉状态 这句话的意思就是&#xff1a; 我们可以看的图片当中&#xff0c;绿色的 target element&#xff08;目标元素&#xff09;&#xff0c…

1.12马原总复习TOTAL

&#xff08;价值形式&#xff09;不变资本、可变资本 不变资本是以生产资料形态存在的资本&#xff0c;通过具体劳动转移到新产品中&#xff0c;价值量不会大于它原本的价值量&#xff1b; 可变资本是用来购买劳动力的资本&#xff0c;产生剩余价值 可变资本里&#xff0c;…

搭建一个简单的Spring Demo

要学习Spring 源码&#xff0c;一个是从Spring GitHub 上去down源码&#xff0c;然后倒入IDEA编译&#xff0c;但这种方法费时费力&#xff0c;如果你不需要对Spring 源码进行修改后&#xff0c;再编译的话&#xff0c;直接搭建一个Spring Demo 的Maven项目&#xff0c;引入Spr…

官宣首批 CESS 全球大使,更多席位邀您报名参与!

CESS&#xff08;Cumulus Encrypted Storage System&#xff09;很荣幸地向大家宣布「CESS 全球大使计划」的首批入选大使&#xff01; CESS 全球大使计划旨在汇聚全球对区块链技术充满热情、愿意为 CESS 生态做出贡献的建设者。该计划专注于提升社区知名度和影响力&#xff0c…

数据库复试—关系数据库标准语言SQL

数据库复试—关系数据库标准语言SQL SQL&#xff1a;结构化查询语言 以教材中的学生-课程数据库为例进行SQL基础语法的复习 数据库实验环境选择SQLServer 11 关系模式 学生表Student(Sno,Sname,Ssex,Sage,Sdept) 课程表Course(Cno,Cname,Cpno,Ccredit) 学生选课表SC&#xf…

2526. 随机数生成器(BSGS,推导)

题目路径&#xff1a; https://www.acwing.com/problem/content/2528/ 思路&#xff1a;

WPF 在DataGrid使用过程中,如果单击某一行理论就会选中哪一行,实际不能选中。DataGrid空白格不能选择行

wpf 在DataGrid使用过程中&#xff0c;如果单击某一行理论就会选中哪一行&#xff0c;但是单击的点刚好这列没有值、内容为空时&#xff0c;单击了也没有选中这一行。如果这列有值就容易选中这一行&#xff0c;这是为什么&#xff0c;如何解决&#xff1f; 确保列模板中即使没有…

Yolov8不废话!参考手册!

Yolov8使用 yolo taskdetect modetrain modelyolov8n.pt args...classify predict yolov8n-cls.yaml args...segment val yolov8n-seg.yaml args...export yolov8n.pt formatonnx args...使用Ultralytics YOLO进行模型训练 …

设置代码模板创建sql映射文件、Mybatis主配置文件

目录 1、Sql映射&#xff08;Sql Mapper&#xff09;文件的介绍 2、Mybatis的主配置文件的介绍 3、通过代码模板创建Sql映射文件 4、通过代码模板创建Mybatis主配置文件 1、Sql映射&#xff08;Sql Mapper&#xff09;文件的介绍 <?xml version"1.0" encod…

UCIE协议介绍--芯粒间互联标准

UCIE协议介绍--芯粒间互联标准 1 背景2 UCIE协议介绍2.1 协议层2.2 适配层2.3 物理层2.4 D2D接口 3 Transmission3.1 SideBand数据包3.2 SideBand包格式3.2.1 MRd/Mwr/CfgRd/CfgWr3.2.2 Completion3.2.3 Message 3.3 FDI接口信号 4 链路训练4.1 PHY LSM状态介绍 1 背景 为什么…

Windows 下使用C#开启蓝牙(未解决的坑)

需求 当程序检测到蓝牙未打开时需要程序自动将W10的蓝牙开启。 资料 Turn on/off Bluetooth radio/adapter from cmd/powershell in Windows 10 - Super User 上的这个连接是通过powershell 开启蓝牙具体代码如下 [CmdletBinding()] Param ([Parameter(Mandatory$true)][V…

代码随想录算法训练营第十三天 |239.滑动窗口最大值,347.前k个高频元素(待补充)

239.滑动窗口最大值 1、题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 2、文章讲解&#xff1a;代码随想录 3、视频讲解&#xff1a; 单调队列正式登场&#xff01;| LeetCode&#xff1a;239. 滑动窗口最大值_哔哩哔哩_bili…

LeetCode 热题 100 | 滑动窗口

目录 1 3. 无重复字符的最长子串 2 438. 找到字符串中所有字母异位词 菜鸟做题第二周&#xff0c;语言是 C 1 3. 无重复字符的最长子串 解题思路&#xff1a; 设置两个指针&#xff0c;左指针和右指针&#xff0c;二者之间形成窗口右指针不断右移&#xff0c;新字母被纳…

百家云BRTC的解决方案

随着网络实时通信技术&#xff08;Web Real-Time Communication&#xff0c;简称WebRTC&#xff09;的不断发展和普及&#xff0c;webRTC已成为现代互联网通讯领域的核心技术之一。它体现在方方面面比如&#xff1a; 实时视频通话&#xff1a; WebRTC 可以用于实现浏览器之间的…