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

网站开发合作重庆seo顾问

网站开发合作,重庆seo顾问,南通网站定制哪家好,广州越秀区天气预报发现更多计算机知识,欢迎访问Cr不是铬的个人网站 最近数据结构学到二叉树,就刷了刷力扣,写这篇文章也是辅助记忆。 103二叉树锯齿形遍历 要解出本道题,首先要会层次遍历。层次遍历我们都知道用一个队列去实现就行。但是力扣这里…

发现更多计算机知识,欢迎访问Cr不是铬的个人网站

最近数据结构学到二叉树,就刷了刷力扣,写这篇文章也是辅助记忆。

103二叉树锯齿形遍历

file


要解出本道题,首先要会层次遍历。层次遍历我们都知道用一个队列去实现就行。但是力扣这里的输出时一个二维的vector,每一层的值在不同的列表里面。这里是一个难点。这个锯齿形遍历无非加一个判断本层是奇数还是偶数层,然后用内置的revers函数处理一下就可。

代码:

class Solution {
public:vector<vector<int>> zigzagLevelOrder(TreeNode* root) {vector<vector<int>> ret; // 存储结果的二维向量queue<TreeNode*> dq; // 辅助队列用于层序遍历if (root == nullptr) {return ret; // 如果根节点为空,直接返回空结果}dq.push(root); // 将根节点入队int level = 1; // 层级标志,初始为1while (!dq.empty()) {int size = dq.size(); // 当前层的节点数vector<int> tmp; // 临时向量存储当前层的节点值for (int i = 0; i < size; i++) {TreeNode* node = dq.front(); // 取出队首节点dq.pop(); // 出队tmp.push_back(node->val); // 将节点值存入临时向量if (node->left != nullptr) {dq.push(node->left); // 左子节点入队}if (node->right != nullptr) {dq.push(node->right); // 右子节点入队}}if (level % 2 == 0) {reverse(tmp.begin(), tmp.end()); // 如果是偶数层级,将临时向量反转}ret.push_back(tmp); // 将当前层的节点值向量存入结果向量level++; // 层级标志自增}return ret; // 返回结果向量}
};

103对称二叉树

file

判断对称二叉树可以在判断完全相同的二叉树的基础上面进行。只是递归的时候变成了left->right ,rigth->left这种.

利用递归解决代码:

class Solution {
public:// 判断两个节点是否镜像对称bool isMirror(TreeNode* left, TreeNode* right) {if (left == nullptr && right == nullptr) {return true; // 如果两个节点都为空,则它们镜像对称} else if (left == nullptr || right == nullptr) {return false; // 如果其中一个节点为空,则它们不镜像对称} else {// 判断当前节点的值相等,并且左子树的左子节点与右子树的右子节点镜像对称,// 左子树的右子节点与右子树的左子节点镜像对称return (left->val == right->val) && isMirror(left->left, right->right) && isMirror(left->right, right->left);}}// 判断二叉树是否对称bool isSymmetric(TreeNode* root) {if (root == nullptr) {return true; // 如果根节点为空,则认为是对称的}return isMirror(root->left, root->right); // 判断根节点的左子树和右子树是否镜像对称}
};

isMirror函数中,如果两个节点都为空,则它们镜像对称;如果其中一个节点为空,则它们不镜像对称;否则,判断当前节点的值相等,并且左子树的左子节点与右子树的右子节点镜像对称,左子树的右子节点与右子树的左子节点镜像对称

由前序遍历与中序遍历得到树

file

这是一个非常经典的问题,这里我给出一个我觉得很容易理解的代码:

class Solution {
public:// 通过前序遍历和中序遍历构建二叉树的递归函数TreeNode* build(vector<int>& preorder, int l1, int r1, vector<int>& inorder, int l2, int r2) {TreeNode* root = new TreeNode(preorder[l1]); // 创建当前子树的根节点int i = l2;while (inorder[i] != root->val) {i++; // 在中序遍历中找到根节点的位置}int Llen = i - l2; // 计算左子树的长度int Rlen = r2 - i; // 计算右子树的长度if (Llen <= 0) {root->left = nullptr; // 如果左子树长度小于等于0,说明左子树为空} else {// 递归构建左子树,左子树的前序遍历范围为[l1+1, l1+Llen],中序遍历范围为[l2, i-1]root->left = build(preorder, l1 + 1, l1 + Llen, inorder, l2, i - 1);}if (Rlen <= 0) {root->right = nullptr; // 如果右子树长度小于等于0,说明右子树为空} else {// 递归构建右子树,右子树的前序遍历范围为[l1+Llen+1, r1],中序遍历范围为[i+1, r2]root->right = build(preorder, l1 + Llen + 1, r1, inorder, i + 1, r2);}return root; // 返回当前子树的根节点}// 构建二叉树TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {int n = preorder.size(); // 前序遍历序列的长度int m = inorder.size(); // 中序遍历序列的长度TreeNode* root;root = build(preorder, 0, n - 1, inorder, 0, m - 1); // 调用递归函数构建二叉树return root; // 返回根节点}
};

考虑一下,如果要求的是从后序遍历和中序遍历得到树呢?上述代码该如何变化呢?

这里也贴上代码:

class Solution {
public:TreeNode* build(vector<int>& inorder, int l1, int r1, vector<int>& postorder, int l2, int r2){if (l1 > r1 || l2 > r2)return nullptr;TreeNode* root = new TreeNode(postorder[r2]);int i = l1;while (inorder[i] != root->val)i++;int Llen = i - l1;int Rlen = r1 - i;root->left = build(inorder, l1, i - 1, postorder, l2, l2 + Llen - 1);root->right = build(inorder, i + 1, r1, postorder, l2 + Llen, r2 - 1);return root;}TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {int n = inorder.size();int m = postorder.size();TreeNode* root;root = build(inorder, 0, n - 1, postorder, 0, m - 1);return root;}
};

本文由博客一文多发平台 OpenWrite 发布!

http://www.yayakq.cn/news/8645/

相关文章:

  • 搭建网站怎么挣钱找别人做网站要注意什么软件
  • 网站虚拟机可以自己做吗中文网站建设工具
  • 企业网站设计与实现网站建设公司现在还挣钱吗
  • 咨询公司前景好不好宁波做网站seo的
  • 建站平台 iis厦门电信网站备案
  • 一般做平面网站多少钱开发网络新技术的平台
  • 聊城wap网站制作网站页头图片
  • 安徽省建设监理协会网站什么是大型门户网站
  • 网站整体克隆包含后台南昌网络营销网站
  • 十堰最专业的网站建设公司湖北外贸网站建设费用
  • 网站被攻击打不开怎么办开发者工具app安卓版
  • 网站建设制作方式有哪些兰亭集势网站模板
  • 做网站ui主要研究内容网站敏感关键词.txt
  • 深圳网站建设 百业望城经济建设开区门户网站
  • 网站建设要买哪些软件即墨网站建设即墨
  • 如何自己开发一个网站怎么用自己的电脑做网站服务器
  • 园林设计公司网站软件是怎么制作的
  • 做教育培训的网站闵行区网站开发
  • 千万pv网站开发成本中国建筑英才网官网手机版
  • 网页设计与网站开发超链接文交所网站开发
  • 简单html网站模板重庆旅游景点
  • 城市建设管理网站无锡自助网站
  • 长沙开发网站的公司哪家好住房和城乡建设部网站规范答疑
  • 网站买空间郑州妇科医院哪个医院最好
  • 淘宝客手机网站怎么做织梦网站推广插件
  • 东莞服务公司推广seo实战密码第四版pdf
  • 公司网站建设业务文案农村电子商务发展现状
  • 泰安网站建设报价百度指数查询
  • 网站开发 图片存放郑州生活信息网
  • 苏州高端网站建设设计网站建设哪里比较好