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

红旗网站建设百度搜索网

红旗网站建设,百度搜索网,免费微信营销系统,动物网站建设代码随想录二刷Day15 今日任务 层序遍历 226.翻转二叉树 101.对称二叉树 语言&#xff1a;C 层序遍历 102.二叉树的层序遍历 class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> res;if(root NULL) …

代码随想录二刷Day15

今日任务

层序遍历
226.翻转二叉树
101.对称二叉树
语言:C++

层序遍历

102.二叉树的层序遍历

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

107.二叉树的层序遍历II

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

199.二叉树的右视图

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

637.二叉树的层平均值

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

429.N叉树的层序遍历

class Solution {
public:vector<vector<int>> levelOrder(Node* root) {vector<vector<int>> res;if(root == NULL) return res;queue<Node*> que;que.push(root);while(!que.empty()){int n = que.size();vector<int> tmp;for(int i = 0; i < n; i++){Node* cur = que.front();que.pop();tmp.push_back(cur->val);vector<Node*> children = cur->children;for(int j = 0; j < children.size(); j++){que.push(children[j]);}}res.push_back(tmp);}return res;}
};

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

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

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

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

117.填充每个节点的下一个右侧节点指针II
代码和上道题相同

226. 翻转二叉树

链接:https://leetcode.cn/problems/invert-binary-tree/
深度优先遍历-递归(前/后序遍历的递归)
递归三部曲:确定参数和返回值,确定终止条件,确定单层递归逻辑

class Solution {
public:TreeNode* invertTree(TreeNode* root) {if(root == NULL) return root;swap(root->left, root->right);invertTree(root->left);invertTree(root->right);return root;}
};

深度优先遍历-迭代(前/后序遍历的迭代)

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

广度优先遍历-层序遍历

class Solution {
public:TreeNode* invertTree(TreeNode* root) {if(root == NULL) return root;queue<TreeNode*> que;que.push(root);while(!que.empty()){int n = que.size();for(int i = 0; i < n; i++){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. 对称二叉树

链接:https://leetcode.cn/problems/symmetric-tree/
递归

class Solution {
public:bool compare(TreeNode* left, TreeNode* right){if(left == NULL && right != NULL) return false;else if(left != NULL && right == NULL) return false;else if(left == NULL && right == NULL) return true;else if(left->val != right->val) return false;bool outside = compare(left->left, right->right);bool inside = compare(left->right, right->left);return outside && inside;}bool isSymmetric(TreeNode* root) {if(root == NULL) return root;return compare(root->left, root->right);}
};

迭代

class Solution {
public:bool isSymmetric(TreeNode* root) {if(root == NULL) return root;queue<TreeNode*> que;que.push(root->left);que.push(root->right);while(!que.empty()){TreeNode* node1 = que.front();que.pop();TreeNode* node2 = que.front();que.pop();if(node1 == NULL && node2 != NULL) return false;else if(node1 != NULL && node2 == NULL) return false;else if(node1 != NULL && node2 != NULL && node1->val != node2->val) return false;else if(node1 == NULL && node2 == NULL) continue;que.push(node1->left);que.push(node2->right);que.push(node1->right);que.push(node2->left);}return true;}
};

100.相同的树
递归

class Solution {
public:bool compare(TreeNode* pNode, TreeNode* qNode){if(pNode == NULL && qNode == NULL) return true;else if(pNode == NULL || qNode == NULL) return false;else if(pNode->val != qNode->val) return false;bool left = compare(pNode->left, qNode->left);bool right = compare(pNode->right, qNode->right);return left && right;}bool isSameTree(TreeNode* p, TreeNode* q) {if(p == NULL && q == NULL) return true;else if(p == NULL || q == NULL) return false;return compare(p, q);}
};

迭代

class Solution {
public:bool isSameTree(TreeNode* p, TreeNode* q) {if(p == NULL && q == NULL) return true;else if(p == NULL || q == NULL) return false;queue<TreeNode*> que;que.push(p);que.push(q);while(!que.empty()){TreeNode* node1 = que.front();que.pop();TreeNode* node2 = que.front();que.pop();if(node1 == NULL && node2 == NULL) continue;else if(node1 == NULL || node2 == NULL) return false;else if(node1->val != node2->val) return false;que.push(node1->left);que.push(node2->left);que.push(node1->right);que.push(node2->right);}return true;}
};

572.另一个树的子树
递归

class Solution {
public:bool compare(TreeNode* root, TreeNode* subRoot){if(root == NULL && subRoot == NULL) return true;else if(root == NULL || subRoot == NULL) return false;else if(root->val != subRoot->val) return false;bool left = compare(root->left, subRoot->left);bool right = compare(root->right, subRoot->right);return left && right;}bool dfs(TreeNode* root, TreeNode* subRoot){if(root == NULL && subRoot != NULL) return false;return compare(root, subRoot) || dfs(root->left, subRoot) || dfs(root->right, subRoot);}bool isSubtree(TreeNode* root, TreeNode* subRoot) {return dfs(root, subRoot);}
};

迭代(效率不高)

class Solution {
public:bool isSubtree(TreeNode* root, TreeNode* subRoot) {queue<TreeNode*> que1;que1.push(root);while(!que1.empty()){int n = que1.size();for(int i = 0; i < n; i++){TreeNode* cur = que1.front();que1.pop();if(cur->left) que1.push(cur->left);if(cur->right) que1.push(cur->right);if(cur != NULL && cur->val == subRoot->val){queue<TreeNode*> que2;int flag = 0;que2.push(cur);que2.push(subRoot);while(!que2.empty()){TreeNode* node1 = que2.front();que2.pop();TreeNode* node2 = que2.front();que2.pop();if(node1 == NULL && node2 == NULL) continue;else if(node1 == NULL || node2 == NULL){flag = 1;break;}else if(node1->val != node2->val){flag = 1;break;}//cout << node1->val << " " << node2->val << " " << flag << endl;que2.push(node1->left);que2.push(node2->left);que2.push(node1->right);que2.push(node2->right);}if(flag == 0) return true;}}}return false;}
};
http://www.yayakq.cn/news/722158/

相关文章:

  • 网站域名怎么填写金属网站模板
  • 网站建设学什么的上海做个网站多少钱
  • 刷网站排名 优帮云大连旅顺景点
  • 内蒙古自治区建设厅网站首页dede后台做两个网站
  • 洛阳制作网站的公司吗湛江wx
  • 网站设计师 要求有没有专门做尾料回收的网站
  • 外包加工网怎么样吕梁seo排名
  • 为网站添加注册功能河南建设厅二建公示网站首页
  • 个人站长适合做什么网站深圳vi设计公司推荐
  • 免费网站建设步骤莆田seo培训
  • 忻州专业网站建设个人主页模板 html
  • 点拓网站建设wordpress手机端兼容
  • 检察门户网站建设情况常州网站搭建公司
  • pc网站是什么中国十大公司排行榜
  • 网站做icp备案需要多久外包网站建设
  • 深圳市网站设计公网站的交互体验
  • 网站焦点图怎么做分销微信小程序开发
  • 找人 做网站 一般注意网站建设平台源码提供
  • 购物网站开发案例下载做网站虚拟主机怎么选择
  • 怎么做百度推广的代理提升seo排名的方法
  • 网站建设求职信息相册制作app
  • 网站源码使用wordpress作伪静态网页404
  • 深圳价格实惠的网站建设公司蚌埠 网站制作
  • 最新网页游戏开服时间表上海企业网站seo多少钱
  • 沧州高端网站建设做网站的前景如何
  • pc响应式网站设计中山百度seo
  • 网站建设合同报价单 模板下载建设网站的计划书
  • 策划会展网站建设云伙伴公司客户案例
  • 网站网络安全怎么做厦门建公司网站
  • 专业做调查的网站统计工具