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

网站如何做浏览量国外十大免费服务器和域名

网站如何做浏览量,国外十大免费服务器和域名,网站代运营多少钱一个月,网站的总体方案与功能设计Day15 层序遍历102.二叉树的层序遍历107.二叉树的层次遍历 II199.二叉树的右视图637.二叉树的层平均值429.N叉树的层序遍历515.在每个树行中找最大值116.填充每个节点的下一个右侧节点指针117.填充每个节点的下一个右侧节点指针II104.二叉树的最大深度111.二叉树的最小深度 226…

Day15

    • 层序遍历
      • 102.二叉树的层序遍历
      • 107.二叉树的层次遍历 II
      • 199.二叉树的右视图
      • 637.二叉树的层平均值
      • 429.N叉树的层序遍历
      • 515.在每个树行中找最大值
      • 116.填充每个节点的下一个右侧节点指针
      • 117.填充每个节点的下一个右侧节点指针II
      • 104.二叉树的最大深度
      • 111.二叉树的最小深度
    • 226.翻转二叉树
    • 101.对称二叉树

层序遍历

层序遍历就相当于图论中的广度优先搜索。
递归遍历就相当于图论中的深度优先搜索。
只使用二叉树结构,无法层序遍历。因为当你遍历到一个某个节点左节点时,无法遍历到其右节点。需要一个其他结构来辅助。选择使用队列queue保存每一层待遍历的元素。

102.二叉树的层序遍历

题目链接:102.二叉树的层序遍历
迭代

class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {queue<TreeNode*> que;//记录每层节点vector<vector<int>> res;if (root) que.push(root);while (!que.empty()) {vector<int> res1;int size = que.size();//用于记录弹出节点个数,就是每层节点个数while (size--) {TreeNode* cur = que.front();que.pop();res1.push_back(cur->val);//记录节点数值if (cur->left) que.push(cur->left);//左节点入队列if (cur->right) que.push(cur->right);//右节点入队列}res.push_back(res1);}return res;}
};

递归

class Solution {
public:void recursive(TreeNode* cur, vector<vector<int>>& res, int depth) {if (!cur) return;//返回条件if (res.size() == depth) res.push_back(vector<int>());//开辟一个空的vector<int>
//        if (res.size() == depth) res.emplace_back();等价于上一行res[depth].push_back(cur->val);recursive(cur->left, res, depth + 1);//depth+1是回溯recursive(cur->right, res, depth + 1);//depth+1是回溯}vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> res;int depth = 0;//给res二维数组,用来赋外层索引recursive(root, res, depth);return res;}
};

107.二叉树的层次遍历 II

题目链接:107.二叉树的层次遍历 II
因为节点遍历只能从根节点开始。所以就正常层序遍历,最后结果反转一下。
迭代

class Solution {
public:vector<vector<int>> levelOrderBottom(TreeNode* root) {vector<vector<int>> res;queue<TreeNode*> que;if (root) que.push(root);while (!que.empty()) {int size = que.size();vector<int> res1;while (size--) {TreeNode* cur = que.front();que.pop();res1.push_back(cur->val);if (cur->left) que.push(cur->left);if (cur->right) que.push(cur->right);}res.push_back(res1);}reverse(res.begin(), res.end());return res;}
};

递归

class Solution {
public:void recursion(TreeNode* root, vector<vector<int>>& res, int depth) {if (!root) return;if (res.size() == depth) res.emplace_back();res[depth].emplace_back(root->val);recursion(root->left, res, depth + 1);//depth+1是回溯recursion(root->right, res, depth + 1);//depth+1是回溯}vector<vector<int>> levelOrderBottom(TreeNode* root) {vector<vector<int>> res;int depth = 0;recursion(root, res, depth);reverse(res.begin(), res.end());return res;}
};

199.二叉树的右视图

题目链接:199.二叉树的右视图
迭代

class Solution {
public:vector<int> rightSideView(TreeNode* root) {queue<TreeNode*> que;vector<int> res;if (root) que.push(root);while (!que.empty()) {int size = que.size();while (size--) {TreeNode* cur = que.front();que.pop();if (!size)/*size = 0*/ res.push_back(cur->val);if (cur->left) que.push(cur->left);if (cur->right) que.push(cur->right);}}return res;}
};

递归

class Solution {
public:void recursion(TreeNode* root, vector<int>& res, int depth) {if (!root) return;if (res.size() == depth) res.emplace_back(root->val);//先加入右节点元素,因为是保存右节点recursion(root->right, res, depth + 1);//depth+1是回溯recursion(root->left, res, depth + 1);//depth+1是回溯}vector<int> rightSideView(TreeNode* root) {vector<int> res;int depth = 0;recursion(root, res, depth);return res;}
};

637.二叉树的层平均值

题目链接:637.二叉树的层平均值

class Solution {
public:vector<double> averageOfLevels(TreeNode* root) {vector<double> res;queue<TreeNode*> que;if (root) que.push(root);while (!que.empty()) {int size = que.size();double sum = 0;int cnt = 0;while (size--) {TreeNode* cur = que.front();que.pop();sum += cur->val;++cnt;if (cur->left) que.push(cur->left);if (cur->right) que.push(cur->right);}res.push_back(sum / cnt);}return res;}
};

429.N叉树的层序遍历

题目链接:429.N叉树的层序遍历

class Solution {
public:vector<vector<int>> levelOrder(Node* root) {queue<Node*> que;vector<vector<int>> res;if (root) que.push(root);while (!que.empty()) {int size = que.size();vector<int> res1;while (size--) {Node* cur = que.front();que.pop();res1.push_back(cur->val);for (auto& i : cur->children) {que.push(i);}}res.push_back(res1);}return res;}
};

515.在每个树行中找最大值

题目链接:515.在每个树行中找最大值

class Solution {
public:vector<int> largestValues(TreeNode* root) {vector<int> res;queue<TreeNode*> que;if (root) que.push(root);while (!que.empty()) {int size = que.size();int maxValue = INT_MIN;while (size--) {TreeNode* cur = que.front();que.pop();maxValue = max(maxValue, cur->val);if (cur->left) que.push(cur->left);if (cur->right) que.push(cur->right);}res.push_back(maxValue);}return res;}
};

116.填充每个节点的下一个右侧节点指针

题目链接:116.填充每个节点的下一个右侧节点指针

class Solution {
public:Node* connect(Node* root) {queue<Node*> que;if (root) que.push(root);while (!que.empty()) {int size = que.size();while (size--) {Node* cur = que.front();que.pop();if (size) cur->next = que.front();//如果不是最后一个,与下一个节点相连if (cur->left) que.push(cur->left);if (cur->right) que.push(cur->right);}}return root;}
};

117.填充每个节点的下一个右侧节点指针II

题目链接:117.填充每个节点的下一个右侧节点指针II
与上一道题一模一样

class Solution {
public:Node* connect(Node* root) {queue<Node*> que;if (root) que.push(root);while (!que.empty()) {int size = que.size();while (size--) {Node* cur = que.front();que.pop();if (size) cur->next = que.front();if (cur->left) que.push(cur->left);if (cur->right) que.push(cur->right);}}return root;}
};

104.二叉树的最大深度

题目链接:104.二叉树的最大深度

class Solution {
public:int maxDepth(TreeNode* root) {queue<TreeNode*> que;if (root) que.push(root);int res = 0;while (!que.empty()) {int size = que.size();while (size--) {TreeNode* cur = que.front();que.pop();if (cur->left) que.push(cur->left);if (cur->right) que.push(cur->right);}++res;}return res;}
};

111.二叉树的最小深度

题目链接:111.二叉树的最小深度

class Solution {
public:int minDepth(TreeNode* root) {queue<TreeNode*> que;if (!root) return 0;if (root) que.push(root);int res = 1;//至少有一层while (!que.empty()) {int size = que.size();while (size--) {TreeNode* cur = que.front();que.pop();if (cur->left) que.push(cur->left);if (cur->right) que.push(cur->right);if (!cur->left && !cur->right) return res;}++res;}return res;}
};

226.翻转二叉树

题目链接:226.翻转二叉树
前、后序遍历很简单。
前序递归

class Solution {
public:TreeNode* invertTree(TreeNode* root) {if (!root) return nullptr;swap(root->left, root->right);//中invertTree(root->left);//左invertTree(root->right);//右return root;}
};

后序递归

class Solution {
public:TreeNode* invertTree(TreeNode* root) {if (!root) return nullptr;invertTree(root->left);//左invertTree(root->right);//右swap(root->left, root->right);//中return root;}
};

中序递归:代码上看是两次root->left

class Solution {
public:TreeNode* invertTree(TreeNode* root) {if (!root) return nullptr;invertTree(root->left);//左swap(root->left, root->right);//中//因为上一行代码已经处理过左树,处理完换成右树//接下来要处理的是原来的右树,但是已经变成左树了invertTree(root->left);//右return root;}
};

前序迭代

class Solution {
public:TreeNode* invertTree(TreeNode* root) {stack<TreeNode*> st;if (root) st.push(root);while (!st.empty()) {TreeNode* cur = st.top();if (cur) {st.pop();if (cur->right) st.push(cur->right);//右if (cur->left) st.push(cur->left);//左st.push(cur);//中st.push(nullptr);} else {st.pop();cur = st.top();st.pop();swap(cur->left, cur->right);}}return root;}
};

中序迭代

class Solution {
public:TreeNode* invertTree(TreeNode* root) {stack<TreeNode*> st;if (root) st.push(root);while (!st.empty()) {TreeNode* cur = st.top();st.pop();if (cur) {if (cur->right) st.push(cur->right);//右st.push(cur);//中st.push(nullptr);if (cur->left) st.push(cur->left);//左} else {cur = st.top();st.pop();swap(cur->left, cur->right);}}return root;}
};

后序迭代

class Solution {
public:TreeNode* invertTree(TreeNode* root) {stack<TreeNode*> st;if (root) st.push(root);while (!st.empty()) {TreeNode* cur = st.top();st.pop();if (cur) {st.push(cur);st.push(nullptr);if (cur->right) st.push(cur->right);if (cur->left) st.push(cur->left);} else {cur = st.top();st.pop();swap(cur->left, cur->right);}}return root;}
};

层序迭代

class Solution {
public:TreeNode* invertTree(TreeNode* root) {queue<TreeNode*> que;if (root) que.push(root);while (!que.empty()) {int size = que.size();while (size--) {TreeNode* cur = que.front();que.pop();swap(cur->left, cur->right);if (cur->left) que.push(cur->left);if (cur->right) que.push(cur->right);}}return root;}
};

101.对称二叉树

题目链接:101.对称二叉树
因为是先判断左右是否对称,再将结果传给中。顺序为左右中。所以是后序遍历。
递归

class Solution {
public:bool recursion(TreeNode* cur1, TreeNode* cur2) {//先排除空节点//这两个语句不能调换if (!cur1 && !cur2) return true;//非空之后,再排除值。if (!cur1 || !cur2 || cur1->val != cur2->val/*值判断一定要在非空之后*/) return false;auto outside = recursion(cur1->left, cur2->right);auto inside = recursion(cur1->right, cur2->left);return outside && inside;}bool isSymmetric(TreeNode* root) {if (!root) return true;return recursion(root->left, root->right);}
};

对于判断条件需要强调

if (!cur1 && !cur2) return true;
if (!cur1 || !cur2) return false;

第一个if判断了同时为空的条件,满足条件,执行return。如果执行到第二条if语句,表示第一个if一定失效,即cur1cur2不可能同时为空(有cur1为空,则cur2不为空;cur1不为空,则cur2为空),所以第二个if只需要判断cur1不为空(cur2一定为空)或者cur2不为空(cur1一定为空)即可。重要的是这两条if不能颠倒顺序

if (!cur1 && !cur2) return true;
if (!cur1 && cur2) return false;
if (cur1 && !cur2) return false;

也就是,上面三条if可以用两条if来代替。因为第二条的if中的cur2和第三条if中的cur1一定是非空的,是多余的。

由于if后是return语句,所以可以不写else,先if( && )再写if( || )。更具一般性地,if( && ) else if ( || )

迭代

class Solution {
public:bool isSymmetric(TreeNode* root) {if (!root) return true;stack<TreeNode*> st;st.push(root->left);st.push(root->right);while (!st.empty()) {auto leftNode = st.top();st.pop();auto rightNode = st.top();st.pop();if (!leftNode && !rightNode) continue;if (!leftNode || !rightNode || leftNode->val != rightNode->val)return false;st.push(leftNode->left);st.push(rightNode->right);st.push(leftNode->right);st.push(rightNode->left);}return true;}
};

文章转载自:
http://wanta.rjbb.cn
http://secateur.rjbb.cn
http://ammonotelic.rjbb.cn
http://flowerpot.rjbb.cn
http://stack.rjbb.cn
http://readin.rjbb.cn
http://avitrice.rjbb.cn
http://oenochoe.rjbb.cn
http://pericarditis.rjbb.cn
http://mun.rjbb.cn
http://sakkara.rjbb.cn
http://rhizoctonia.rjbb.cn
http://drifting.rjbb.cn
http://polycotyledony.rjbb.cn
http://metapolitics.rjbb.cn
http://erf.rjbb.cn
http://fawningly.rjbb.cn
http://involved.rjbb.cn
http://fractional.rjbb.cn
http://birth.rjbb.cn
http://semipermeable.rjbb.cn
http://dryly.rjbb.cn
http://messianic.rjbb.cn
http://slup.rjbb.cn
http://jokul.rjbb.cn
http://gossypol.rjbb.cn
http://aerographer.rjbb.cn
http://benedictional.rjbb.cn
http://sobering.rjbb.cn
http://zoogloea.rjbb.cn
http://wattmeter.rjbb.cn
http://cruces.rjbb.cn
http://winningly.rjbb.cn
http://sheeting.rjbb.cn
http://provolone.rjbb.cn
http://sarsaparilla.rjbb.cn
http://hypabyssal.rjbb.cn
http://chromodynamics.rjbb.cn
http://crick.rjbb.cn
http://nephrectomy.rjbb.cn
http://marathon.rjbb.cn
http://sudetenland.rjbb.cn
http://interfold.rjbb.cn
http://sting.rjbb.cn
http://ozoner.rjbb.cn
http://decarbonization.rjbb.cn
http://underweight.rjbb.cn
http://basilect.rjbb.cn
http://lempert.rjbb.cn
http://microbian.rjbb.cn
http://wps.rjbb.cn
http://dripolator.rjbb.cn
http://wiry.rjbb.cn
http://guanethidine.rjbb.cn
http://kharakteristika.rjbb.cn
http://erratically.rjbb.cn
http://arena.rjbb.cn
http://caucus.rjbb.cn
http://chausses.rjbb.cn
http://meson.rjbb.cn
http://alimentative.rjbb.cn
http://pyroxyline.rjbb.cn
http://froggy.rjbb.cn
http://semeiography.rjbb.cn
http://indefective.rjbb.cn
http://mesocratic.rjbb.cn
http://philogyny.rjbb.cn
http://klamath.rjbb.cn
http://inequipotential.rjbb.cn
http://similarly.rjbb.cn
http://bourride.rjbb.cn
http://cornada.rjbb.cn
http://photopolymerization.rjbb.cn
http://pauperise.rjbb.cn
http://elias.rjbb.cn
http://panchreston.rjbb.cn
http://ptolemy.rjbb.cn
http://persevere.rjbb.cn
http://rigatoni.rjbb.cn
http://midas.rjbb.cn
http://supership.rjbb.cn
http://apnoea.rjbb.cn
http://kasha.rjbb.cn
http://unsociable.rjbb.cn
http://anaesthetic.rjbb.cn
http://slightness.rjbb.cn
http://northumberland.rjbb.cn
http://gwendolyn.rjbb.cn
http://underactor.rjbb.cn
http://baronage.rjbb.cn
http://iarovize.rjbb.cn
http://ramequin.rjbb.cn
http://recurvature.rjbb.cn
http://deuteranomalous.rjbb.cn
http://disremember.rjbb.cn
http://extracurial.rjbb.cn
http://hastiness.rjbb.cn
http://unshelled.rjbb.cn
http://exceptive.rjbb.cn
http://byelaw.rjbb.cn
http://www.dt0577.cn/news/68535.html

相关文章:

  • 即墨做网站的南昌seo排名收费
  • 空白word个人简历模板下载企业网站优化的三层含义
  • 设计网站名字品牌推广软文案例
  • 网络营销师和互联网营销师的区别成都网站建设seo
  • 瓦房店网站建设国内专业seo公司
  • 怎样建立公司的网站口碑营销经典案例
  • 地产网站互动营销长沙网站排名推广
  • 购买网站做网页游戏网站优化推广排名
  • wordpress能建商城吗关键词优化seo费用
  • 视频拍摄设备推荐seo信息优化
  • 上海做兼职哪个网站网站推广公司电话
  • 建设信用交通网站 省如何推广自己的业务
  • 网站的目的大连seo顾问
  • 做网站做百度竞价赚钱长沙网站seo推广
  • 网站建设规划过程和seo招聘职责
  • 常用h5的制作工具有哪些seo分析师
  • 怎么让别人访问我建的网站人际网络营销2900
  • 做微商海报的网站深圳seo网站优化公司
  • 全屏网站模板制作洛阳seo网站
  • 如何做网站赌博的教程seo排名优化课程
  • 怎么在文档中做网站一点就开b站推广2023
  • 平顶山市哪里有做网站的2021近期时事新闻热点事件简短
  • 顺德哪家做网站新闻头条最新消息30字
  • 百度收录入口查询注意事项关键词排名优化提升培训
  • 做网站 指导怎么创建自己的游戏网站
  • 网站直接做标准曲线百度seo软件优化
  • iis 添加网站nba总得分排行榜最新
  • 玉林做绿化苗木网站的是哪个单位长沙企业关键词优化
  • 做公司网站找谁天猫店铺申请条件及费用
  • 番禺高端网站制作广告联盟平台入口