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

漳州建设银行网站首页重庆电子工程职业学院智慧校园网

漳州建设银行网站首页,重庆电子工程职业学院智慧校园网,网站推广排名怎么做,洛江区建设局网站系列综述#xff1a; #x1f49e;目的#xff1a;本系列是个人整理为了秋招面试的#xff0c;整理期间苛求每个知识点#xff0c;平衡理解简易度与深入程度。 #x1f970;来源#xff1a;材料主要源于【CodeTopHot200】进行的#xff0c;每个知识点的修正和深入主要参… 系列综述 目的本系列是个人整理为了秋招面试的整理期间苛求每个知识点平衡理解简易度与深入程度。 来源材料主要源于【CodeTopHot200】进行的每个知识点的修正和深入主要参考各平台大佬的文章其中也可能含有少量的个人实验自证所有代码均优先参考最佳性能。 结语如果有帮到你的地方就点个赞和关注一下呗谢谢 【C】秋招实习面经汇总篇 文章目录 二叉树的构建基础知识654. 构建二叉树* 相关题目105. 从前序与中序遍历序列构造二叉树106. 从中序与后序遍历序列构造二叉树 二叉搜索树考察较少留后处理基础知识相关题目98. 验证二叉搜索树530. 二叉搜索树的最小绝对差 236. 二叉树的最近公共祖先 235. 二叉搜索树的最近公共祖先 450. 删除二叉搜索树中的节点 669. 修剪二叉搜索树 108. 将有序数组转换为二叉搜索树669. 修剪二叉搜索树 参考博客 点此到文末惊喜↩︎ 二叉树的构建 基础知识 654. 构建二叉树* 654. 最大二叉树 通过始末位置指示容器范围避免每次调用的vector创建开销 TreeNode* constructMaximumBinaryTree(vectorint nums) {auto self [](auto self, int left, int right)-TreeNode*{// 递归出口if (left right) return nullptr;// 如何划分查找区间中的最大根节点int max_pos left;for (int i left1; i right; i) {if (nums[i] nums[max_pos]) max_pos i;}// 建立根节点左递归右递归TreeNode *root new TreeNode(nums[max_pos]);root-left self(self, left, max_pos-1);root-right self(self, max_pos1, right);// 返回根节点return root;};TreeNode *root self(self, 0, nums.size()-1);return root; }相关题目 105. 从前序与中序遍历序列构造二叉树 105. 从前序与中序遍历序列构造二叉树 TreeNode* buildTree(vectorint preorder, vectorint inorder){auto self [](auto self, int pre_left, int pre_right, int in_left, int in_right)-TreeNode*{// 递归出口只需要前序的左右指针符合即可if (pre_left pre_right) return nullptr;// 1. 将前序序列的第一个结点作为根节点TreeNode *root new TreeNode(preorder[pre_left]);// 2. 找到前序序列的第一个结点在后序序列中的位置作为划分 int pivot in_left; for (; pivot in_right; pivot){ // key注意初始化if (inorder[pivot] preorder[pre_left]) // key查找中序的pivotbreak;}// 3. 计算前序数组中的划分位置int pre_pivot pre_left pivot - in_left;// 4. 建立二叉树root-left self(self, pre_left1, pre_pivot, in_left, pivot-1);root-right self(self, pre_pivot1, pre_right, pivot1, in_right);return root;};return self(self, 0, preorder.size()-1, 0, inorder.size()-1); }106. 从中序与后序遍历序列构造二叉树 106. 从中序与后序遍历序列构造二叉树 通过始末位置指示容器范围避免每次调用的vector创建开销 TreeNode* buildTree(vectorint inorder, vectorint postorder) {auto self [](auto self, int in_left, int in_right, int post_left, int post_right)-TreeNode*{// 递归出口if (post_left post_right) return nullptr;// 建立根结点TreeNode *root new TreeNode(postorder[post_right]);// 在中序数组中查找划分位置int pivot in_left;for (; pivot in_right; pivot) {if (inorder[pivot] postorder[post_right])break;}// 建立左右子树int post_pivot post_right - (in_right - pivot);// key注意括号root-left self(self, in_left, pivot-1, post_left, post_pivot-1);root-right self(self, pivot1, in_right, post_pivot, post_right-1);return root;};return self(self, 0, inorder.size()-1, 0, postorder.size()-1); }二叉搜索树考察较少留后处理 基础知识 相关题目 98. 验证二叉搜索树 98. 验证二叉搜索树 中序遍历下输出的二叉搜索树节点的数值是有序序列 // **********中序遍历形成一个递增数组************** vectorint vec; void inorder(TreeNode *root){if(root nullptr) return ;inorder(root-left);vec.push_back(root-val);inorder(root-right); } // 判断是否中序遍历的数组是递增的 bool isValidBST(TreeNode* root){inorder(root);for(int i 0; i vec.size()-1; i){if(vec[i] vec[i1])// 二叉搜索树的中序排列是严格递增的return false;}return true; }// *********************纯递归********************** bool isValid(TreeNode* current,long left,long right){// 单层逻辑if(currentnullptr) return true;else if(current-valleft||current-valright) return false;// 递归return isValid(current-left,left,current-val)isValid(current-right,current-val,right); } bool isValidBST(TreeNode* root) {return isValid(root,LONG_MIN,LONG_MAX); }530. 二叉搜索树的最小绝对差 530. 二叉搜索树的最小绝对差 思路中序遍历下输出的二叉搜索树节点的数值是有序序列。顺序判断相邻值的绝对值保存最小的即可双指针在树内应用双指针本质是对于一个序列的遍历。 int getMinimumDifference(TreeNode* root) {// 初始化条件stackTreeNode* st;if(root ! nullptr) st.push(root);int res INT_MAX;TreeNode *prior new TreeNode(-1000000);while(!st.empty()){TreeNode* cur st.top();if(cur ! nullptr){st.pop();// 中序遍历if(cur-right) st.push(cur-right);st.push(cur);st.push(nullptr);if(cur-left) st.push(cur-left);}else{st.pop();cur st.top();st.pop();// 节点处理res min(res, cur-val - prior-val);prior cur;// 迭代条件}}return res; }236. 二叉树的最近公共祖先 236. 二叉树的最近公共祖先 后序遍历是一个天然的自低向上的回溯过程状态的向上传递通过判断左右子树是否出现了p和q如果出现p或q则通过回溯值上传到父节点 TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if(root NULL)return NULL;// 每次对返回的结点进行if(root p || root q) return root;TreeNode* left lowestCommonAncestor(root-left, p, q);TreeNode* right lowestCommonAncestor(root-right, p, q);// 结点的处理是尽量返回结点if(left NULL)return right;if(right NULL)return left; if(left right) // p和q在两侧return root;return NULL; // 必须有返回值}235. 二叉搜索树的最近公共祖先 235. 二叉搜索树的最近公共祖先 思路自上而下搜索遇到的第一个节点值在p和q之间的值即为最近公共祖先 TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {while(root) {if (root-val p-val root-val q-val) {root root-left;} else if (root-val p-val root-val q-val) {root root-right;} else return root;}return NULL; }450. 删除二叉搜索树中的节点 450. 删除二叉搜索树中的节点 思路框架 TreeNode* deleteNode(TreeNode* root, int key) {// 健壮性检查if(root nullptr) return nullptr;// 基本初始化TreeNode *cur root;TreeNode *prior root;while (cur ! nullptr){// 符合条件值的处理if(cur-val key){if(cur-left nullptr || cur-right nullptr){// 两个都空if(cur-left nullptr cur-right nullptr) return nullptr;// 被删除节点只有一个孩子或均为空if(key prior-val){// cur是左子树prior-left cur-right;return root; }else{prior-right n cur-right;return root; }}else{// 被删除节点有两个孩子TreeNode *curLeft cur-left;cur cur-right;while(cur-left ! nullptr){cur cur-left;}cur-left curLeft;if(key prior-val){// cur是左子树prior-left prior-left-right;return root; }else{prior-right prior-right-right;return root; }}}prior cur;// 前迭代// 左右节点处理if(key cur-val){if(cur-left){cur cur-left;}else{// 找不到return root;}}else{if(cur-right){cur cur-right;}else{// 找不到return root;}}}return root;}669. 修剪二叉搜索树 669. 修剪二叉搜索树// 1. 确定递归函数的返回类型及参数返回类型是递归算法的输出值类型参数是递归算法的输入 TreeNode* trimBST(TreeNode* root, int low, int high) {// 2. 递归终止条件if (root nullptr ) return nullptr;// 3.节点处理return保留的状态if (root-val low) {// 保留更大的右半部分TreeNode* right trimBST(root-right, low, high);return right;}if (root-val high) {// 保留更小的左半部分TreeNode* left trimBST(root-left, low, high); return left;}// 4.迭代条件root-left trimBST(root-left, low, high); // root-left接入符合条件的左孩子root-right trimBST(root-right, low, high); // root-right接入符合条件的右孩子return root; }108. 将有序数组转换为二叉搜索树 108. 将有序数组转换为二叉搜索树TreeNode* traversal(vectorint nums, int left, int right) {// 递归出口if (left right) return nullptr;// 运算int mid left ((right - left) / 2);// 防止求和溢出TreeNode* root new TreeNode(nums[mid]);// 递归迭代root-left traversal(nums, left, mid - 1);root-right traversal(nums, mid 1, right);return root; } // 主调函数 TreeNode* sortedArrayToBST(vectorint nums) {TreeNode* root traversal(nums, 0, nums.size() - 1);return root; }669. 修剪二叉搜索树 669. 修剪二叉搜索树// 1. 确定递归函数的返回类型及参数返回类型是递归算法的输出值类型参数是递归算法的输入 TreeNode* trimBST(TreeNode* root, int low, int high) {// 2. 递归终止条件if (root nullptr ) return nullptr;// 3.节点处理return保留的状态if (root-val low) {// 保留更大的右半部分TreeNode* right trimBST(root-right, low, high);return right;}if (root-val high) {// 保留更小的左半部分TreeNode* left trimBST(root-left, low, high); return left;}// 4.迭代条件root-left trimBST(root-left, low, high); // root-left接入符合条件的左孩子root-right trimBST(root-right, low, high); // root-right接入符合条件的右孩子return root; }少年我观你骨骼清奇颖悟绝伦必成人中龙凤。 不如点赞·收藏·关注一波 点此跳转到首行↩︎ 参考博客 「代码随想录」47. 全排列 II:【彻底理解排列中的去重问题】详解 codetop
http://www.pierceye.com/news/85522/

相关文章:

  • 如和建立网站安徽省住房和建设厅网站
  • 企业内部网站打不开专门做h5的网站
  • 广州住房保障城市建设局网站四川最新情况最新消息今天
  • 合肥电子商务网站建设国外域名的网站
  • 怎样创建网站域名平台室内装饰设计师国家职业标准
  • 网站建设与管理专业人才调研产品设计公司有哪些
  • 网站改版什么意思只有一个页面的网站
  • 网站背景色html网页设计介绍
  • 网站设计制作培训阜宁网站制作哪家好
  • 海南省住房建设厅网站企业crm软件
  • 繁体版 企业网站网站开发环境实验报告
  • 个人网站模板怎么做网站排名要怎么做
  • 做视频网站 服务器配置163k地方门户网站系统
  • 网站建设英语怎么说营销型电子商务网站
  • 江苏省建设网站一号通小学校园网站建设简介
  • 图片优化网站临淄信息网最新招聘小时工
  • 个人网站备案名称大全免费html网页模板
  • 网站导航漂浮代码wordpress网站打包app
  • 海南建设官方信息网站做网站需要哪些人
  • 安徽外经建设集团有限公司网站做网页的软件哪个好
  • 博罗中山网站建设专业的企业进销存软件比较好
  • 网站定制开发四大基本原则网站建设模板哪里有
  • 丽水网站建设明恩玉杰网站浏览排名
  • 静安广州网站建设制作一个网站数据库怎么做
  • 做微网站的公司哪家好呢桂林市区有什么好玩的
  • 北京响应式的网站网店推广软件
  • 珠海新盈科技 网站建设网站logo怎么做才清晰
  • drupal7建站教程想开个网站怎样开
  • 河南平台网站建设找哪家做动漫姓氏头像的网站
  • 二手车网站怎么做wordpress vr播放插件