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

网站备案做网站必须国外上市网络公司排名

网站备案做网站必须,国外上市网络公司排名,做网站公司需要什么资质,京东网的公司全称是144/94/145. 二叉树的前、中、后序的递归遍历 以中序遍历为例#xff0c;其余类似#xff1a; 给定一个二叉树的根节点 root #xff0c;返回 它的 中序 遍历 。 代码示例#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* Tr…144/94/145. 二叉树的前、中、后序的递归遍历 以中序遍历为例其余类似 给定一个二叉树的根节点 root 返回 它的 中序 遍历 。 代码示例  /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/ class Solution { public:void traversal(TreeNode* cur,vectorint vec){if(cur NULL) return;traversal(cur-left,vec);//左vec.push_back(cur-val);//中traversal(cur-right,vec);//右}vectorint inorderTraversal(TreeNode* root) {vectorint result;traversal(root,result);return result;} }; 总结不同的遍历方式只需将前中后三行代码交换顺序即可 递归三要素  确定递归函数的参数和返回值 确定哪些参数是递归的过程中需要处理的那么就在递归函数里加上这个参数 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。 确定终止条件 写完了递归算法, 运行的时候经常会遇到栈溢出的错误就是没写终止条件或者终止条件写的不对操作系统也是用一个栈的结构来保存每一层递归的信息如果递归没有终止操作系统的内存栈必然就会溢出。 确定单层递归的逻辑 确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程。 144/94/145. 二叉树的前、中、后序的非递归遍历(迭代) 1. 前序遍历和后续遍历遍历节点和处理节点相同可共用一套规则 2. 中序遍历遍历节点和处理节点不相同 前序遍历 class Solution { public:vectorint preorderTraversal(TreeNode* root) {stackTreeNode* st;vectorint result;if (root NULL) return result;st.push(root);while (!st.empty()) {TreeNode* node st.top(); // 中st.pop();result.push_back(node-val);if (node-right) st.push(node-right); // 右空节点不入栈if (node-left) st.push(node-left); // 左空节点不入栈}return result;} }; 后序遍历 class Solution { public:vectorint postorderTraversal(TreeNode* root) {stackTreeNode* st;vectorint result;if (root NULL) return result;st.push(root);while (!st.empty()) {TreeNode* node st.top();st.pop();result.push_back(node-val);if (node-left) st.push(node-left); // 相对于前序遍历这更改一下入栈顺序 空节点不入栈if (node-right) st.push(node-right); // 空节点不入栈}reverse(result.begin(), result.end()); // 将结果反转之后就是左右中的顺序了return result;} }; 处理将元素放进result数组中访问遍历节点 中序遍历  class Solution { public:vectorint inorderTraversal(TreeNode* root) {vectorint result;stackTreeNode* st;TreeNode* cur root;while (cur ! NULL || !st.empty()) {if (cur ! NULL) { // 指针来访问节点访问到最底层st.push(cur); // 将访问的节点放进栈cur cur-left; // 左} else {cur st.top(); // 从栈里弹出的数据就是要处理的数据放进result数组里的数据st.pop();result.push_back(cur-val); // 中cur cur-right; // 右}}return result;} }; 102. 二叉树的层序遍历  给你二叉树的根节点 root 返回其节点值的 层序遍历 。 即逐层地从左到右访问所有节点。 代码示例 class Solution { public:vectorvectorint levelOrder(TreeNode* root) {queueTreeNode* que;vectorvectorint result;if(root ! NULL) que.push(root);while(!que.empty()){int size que.size();vectorint vec;while(size--){TreeNode* node que.front();que.pop();vec.push_back(node-val);if(node-left) que.push(node-left);if(node-right) que.push(node-right);}result.push_back(vec);}return result;} }; 107. 二叉树的层序遍历II   给你二叉树的根节点 root 返回其节点值 自底向上的层序遍历 。 即按从叶子节点所在层到根节点所在的层逐层从左向右遍历 代码示例 class Solution { public:vectorvectorint levelOrderBottom(TreeNode* root) {queueTreeNode* que;vectorvectorint result;if(root ! NULL) que.push(root);while(!que.empty()){int size que.size();vectorint vec;while(size--){TreeNode* node que.front();que.pop();vec.push_back(node-val);if(node-left) que.push(node-left);if(node-right) que.push(node-right);} result.push_back(vec);}reverse(result.begin(),result.end());return result;} }; 注意  以下写法是错的因为reverse 函数不返回任何值返回类型是 void它只是对输入范围内的元素进行原地修改。 return reverse(result.begin(),result.end()); 199. 二叉树的右视图 给定一个二叉树的 根节点 root想象自己站在它的右侧按照从顶部到底部的顺序返回从右侧所能看到的节点值。 代码示例  class Solution { public:vectorint rightSideView(TreeNode* root) {queueTreeNode* que;vectorint result;if(root ! NULL) que.push(root);while(!que.empty()){int size que.size();for(int i 0;isize;i){TreeNode* node que.front();que.pop();if(i (size - 1)) result.push_back(node-val);if(node-left) que.push(node-left);if(node-right) que.push(node-right);}} return result;} }; 226. 翻转二叉树  给你一棵二叉树的根节点 root 翻转这棵二叉树并返回其根节点。 代码示例  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;} }; 101. 对称二叉树  给你一个二叉树的根节点 root  检查它是否轴对称。 代码示例  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); // 左子树右、 右子树左bool isSame outside inside; // 左子树中、 右子树中 逻辑处理return isSame;}bool isSymmetric(TreeNode* root) {if (root NULL) return true;return compare(root-left, root-right);} }; 104. 二叉树的最大深度  给定一个二叉树 root 返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 二叉树的 最大高度 是指最从远叶子节点到根节点的最长路径上的节点数。 代码示例  class Solution { public:int getdepth(TreeNode* node) {if (node NULL) return 0;int leftdepth getdepth(node-left); // 左int rightdepth getdepth(node-right); // 右int depth 1 max(leftdepth, rightdepth); // 中return depth;}int maxDepth(TreeNode* root) {return getdepth(root);} }; 111. 二叉树的最小深度  给定一个二叉树找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明叶子节点是指没有子节点的节点。 代码示例 class Solution { public:int getDepth(TreeNode* node) {if (node NULL) return 0;int leftDepth getDepth(node-left); // 左int rightDepth getDepth(node-right); // 右// 中// 当一个左子树为空右不为空这时并不是最低点if (node-left NULL node-right ! NULL) { return 1 rightDepth;} // 当一个右子树为空左不为空这时并不是最低点if (node-left ! NULL node-right NULL) { return 1 leftDepth;}int result 1 min(leftDepth, rightDepth);return result;}int minDepth(TreeNode* root) {return getDepth(root);} }; 222. 完全二叉树的节点个数  给你一棵 完全二叉树 的根节点 root 求出该树的节点个数。 完全二叉树 的定义如下在完全二叉树中除了最底层节点可能没填满外其余每层节点数都达到最大值并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层则该层包含 1~ 2h 个节点。 代码示例(普通二叉树解法) class Solution { private:int getNodesNum(TreeNode* cur) {if (cur NULL) return 0;int leftNum getNodesNum(cur-left); // 左int rightNum getNodesNum(cur-right); // 右int treeNum leftNum rightNum 1; // 中return treeNum;} public:int countNodes(TreeNode* root) {return getNodesNum(root);} }; 完全二叉树解法 class Solution { public:int countNodes(TreeNode* root) {if (root nullptr) return 0;TreeNode* left root-left;TreeNode* right root-right;int leftDepth 0, rightDepth 0; // 这里初始为0是有目的的为了下面求指数方便while (left) { // 求左子树深度left left-left;leftDepth;}while (right) { // 求右子树深度right right-right;rightDepth;}if (leftDepth rightDepth) {return (2 leftDepth) - 1; // 注意(21) 相当于2^2所以leftDepth初始为0}return countNodes(root-left) countNodes(root-right) 1;} }; 参考如下 代码随想录
http://www.dnsts.com.cn/news/127187.html

相关文章:

  • 深圳建网站兴田德润优秀鞍山 网站建设
  • 正规网站做菠菜广告百度seo如何优化关键词
  • 优化建站案例 网站
  • 做网站排名费用网站怎么做成app
  • 床上做受网站做的最好的视频网站
  • 建设一个个人网站不需要河北省造价信息价查询
  • 广东专业网站开发网站公司怎么做推广
  • 网站搭建免费软件域名做网站出售合法吗
  • 网站建设工作室介绍范文湖南住房和城乡建设网站
  • 深圳市龙岗区网站建设wordpress瀑布流网店
  • 各行业网站建设方案书wordpress怎么做二级导航栏
  • 网站制作工作室制作平台查企业哪个app最好
  • 如何建设论坛网站梅陇做网站
  • 网站pr怎么提升成都专业网站制作
  • 做网站的 简历wordpress压缩图片质量
  • 建立免费个人网站宁波外包seo服务
  • 国外网站做网站主播推荐网站建设服务
  • 北京建设执业资格注册网站装修设计素材网
  • 做群头像的网站在线制作国际设计网
  • 门户网站建设的成果域名申请了怎么用
  • 网站内容吸引怎么做才好个人网站免费申请注册
  • 东营网站建设入门重要新闻今天8条新闻
  • 广州企业网站seo旺道seo推广系统怎么收费
  • 长春网络传媒做网站骗钱wordpress 语法编辑器
  • 盐城网站开发市场淘宝上如何免费开网店
  • 网站与网页的区别.网站内容不收录
  • 响应式网站开发流程图可以做商城网站的公司
  • 网站运营推广这么做普洱建设工程网站
  • 如何做网站的教程二维码wordpress 快速评论插件
  • 网页设计特效网站南宁网站建设找哪家