当前位置: 首页 > news >正文

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

在这里插入图片描述


📘北尘_:个人主页

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

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

文章目录

  • 一、根据二叉树创建字符串
    • 1、题目讲解
    • 2、思路讲解
    • 3、代码实现
  • 二、二叉树的分层遍历
    • 1、题目讲解
    • 2、思路讲解
    • 3、代码实现
  • 三、二叉树的最近公共祖先
    • 1、题目讲解
    • 2、思路讲解+递归展开图
    • 3、代码实现


一、根据二叉树创建字符串

1、题目讲解

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

2、思路讲解

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

3、代码实现

class Solution {
public:string tree2str(TreeNode* root) {string s;if(root==nullptr)return s;s+=to_string(root->val);if(root->left  || (root->left==nullptr && root->right)){s+='(';s+=tree2str(root->left);s+=')';}if(root->right){s+='(';s+=tree2str(root->right);s+=')';}return s;}
};

二、二叉树的分层遍历

1、题目讲解

在这里插入图片描述

2、思路讲解

在这里插入图片描述

3、代码实现

class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {queue<TreeNode*> s;vector<vector<int>>  vv;int levelsize;if(root){s.push(root);levelsize=1;}while(!s.empty()){vector<int> v;while(levelsize--){TreeNode* front=s.front();s.pop();v.push_back(front->val);if(front->left)s.push(front->left);if(front->right)s.push(front->right);    }vv.push_back(v);levelsize=s.size();}return vv;}
};

三、二叉树的最近公共祖先

1、题目讲解

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

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

思路一:

在这里插入图片描述

思路二:

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

3、代码实现

代码一:

class Solution {
public:bool find(TreeNode* root,TreeNode* x){if(root==nullptr)return  false;if(root==x)return true;return (find(root->left,x)||find(root->right,x));}TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if(root==p || root==q)return root;bool pleft=find(root->left,p);bool pright=!pleft;bool qleft=find(root->left,q);bool qright=!qleft;if((pleft && qright) || (pright && qleft)){return root;}if(pleft && qleft){return lowestCommonAncestor(root->left,p,q);}if(pright && qright){return lowestCommonAncestor(root->right,p,q);}return nullptr;}
};

代码二:

class Solution {
public:bool findpath(TreeNode* root,TreeNode* x,stack<TreeNode*>& st){if(root==nullptr)return false;st.push(root);if(root==x)return true;if(findpath(root->left,x,st))return true;if(findpath(root->right,x,st))return true;st.pop();return false;   }TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {stack<TreeNode*> ppath,qpath;findpath(root,p,ppath);findpath(root,q,qpath);while(ppath.size()!=qpath.size()){if(ppath.size()>qpath.size())ppath.pop();elseqpath.pop();}while(ppath.top()!=qpath.top()){ppath.pop();qpath.pop();}return  qpath.top();      }
};

http://www.lryc.cn/news/285333.html

相关文章:

  • Java反射示例
  • 【WinForm.NET开发】实现使用后台操作的窗体
  • 【操作系统和计网从入门到深入】(四)基础IO和文件系统
  • 四.Winform使用Webview2加载本地HTML页面并互相通信
  • 如何有效清理您的Python环境:清除Pip缓存
  • Jira 母公司全面停服 Server 产品,用户如何迁移至极狐GitLab
  • Docker安装配置OnlyOffice
  • 启动低轨道卫星LEO通讯产业与6G 3GPP NTN标准
  • PICO Developer Center 创建和调试 ADB 命令
  • 【VRTK】【PICO】如何快速创建一个用VRTK开发的PICO项目
  • 国产操作系统:VirtualBox安装openKylin-1.0.1虚拟机并配置网络
  • 本地git切换地区后,无法使用ssh访问github 22端口解决方案
  • Chat2DB:AI赋能的多数据库客户端工具,开源领航未来数据库管理
  • SQL Server修改数据字段名的方法
  • Flutter编译报错Connection timed out: connect
  • PG DBA培训26:PostgreSQL运维诊断与监控分析
  • 运维之道—生产环境安装Redis
  • 人工智能数学验证工具LEAN4【入门介绍3】乘法世界-证明乘法的所有运算律
  • Armv8-M的TrustZone技术简介
  • ctfshow-反序列化(web267-web270)
  • 决策树的分类
  • LateX--插入伪代码类型详解
  • 《Python数据分析技术栈》第06章使用 Pandas 准备数据 04 DataFrames
  • wayland(xdg_wm_base) + egl + opengles 最简实例
  • MySQL部署
  • 【ARM 嵌入式 编译系列 3.7 -- newlib 库文件与存根函数 stubs 详细介绍】
  • 【C++】结构体
  • web架构师编辑器内容-拖动元素改变元素的位置和大小的完成
  • 基于CNN的水果识别-含数据集训练模型
  • Hadoop基本概论