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

网站建设的商品分类编码长链接转短链接生成器

网站建设的商品分类编码,长链接转短链接生成器,wordpress调用自定义菜单,开发公司行政专员岗位职责360文库目录 一、先序遍历题目链接1.递归2.非递归 二、中序遍历题目链接1.递归2.非递归 三、后序遍历题目链接1.递归2.非递归 一、先序遍历 先序遍历:先遍历一颗树的根节点,后遍历左子树,最后遍历右子树 先序遍历序列: 1 -> 2 -> 4…

一、先序遍历

先序遍历:先遍历一颗树的根节点,后遍历左子树,最后遍历右子树


在这里插入图片描述

先序遍历序列: 1 -> 2 -> 4 -> 5 -> 3 -> 6 -> 7

题目链接

1.递归

分解子问题方法

class Solution {
public:void preOrder(TreeNode* root,vector<int>& str){if(root==NULL)return;str.push_back(root->val);preOrder(root->left,str);preOrder(root->right,str);}vector<int> preorderTraversal(TreeNode* root) {vector<int> str;preOrder(root,str);return str;}
};

在这里插入图片描述

2.非递归

思路:将一颗二叉树看做两个部分,一个部分是左路节点,另一个部分是左路节点的右子树,先将二叉树的左路节点全部入栈,再依次出栈,出栈的过程中将这个节点的右子树按相同方法将左路节点全部入栈,然后依次出栈,出栈的方法与上面相同,模拟递归调用的方法实现非递归,此时的入栈顺序就是先序遍历序列
在这里插入图片描述
在这里插入图片描述

class Solution {
public:vector<int> preorderTraversal(TreeNode* root) {stack<TreeNode*> st;TreeNode* cur=root;vector<int> v;while(cur||!st.empty()){//访问一棵树的开始//  1、访问左路节点,左路节点入栈,后续一次访问左路节点的右子树while(cur){v.push_back(cur->val);st.push(cur);cur=cur->left;}//一次访问左路节点的右子树TreeNode* top=st.top();st.pop();//子问题的方式访问右子树cur=top->right;}return v;}
};

二、中序遍历

题目链接

中序遍历:先遍历一颗树的左子树,然后遍历根节点,最后遍历右子树
在这里插入图片描述

中序遍历序列:4 -> 2 -> 5 -> 1 -> 6 -> 3 -> 7

1.递归

递归调用分解子问题,与前序遍历递归思路相同

class Solution {
public:void inorder(TreeNode* root,vector<int>& res){if(root==NULL)return;inorder(root->left,res);res.push_back(root->val);inorder(root->right,res);}vector<int> inorderTraversal(TreeNode* root) {vector<int> res;inorder(root,res);return res;}
};

2.非递归

与前序遍历相似,前序遍历是在入栈的顺序为前序遍历序列,而中序遍历则是出栈的顺序则为中序遍历序列
在这里插入图片描述
在这里插入图片描述

class Solution {
public:vector<int> inorderTraversal(TreeNode* root) {stack<TreeNode*> st;TreeNode* cur=root;vector<int> v;while(cur||!st.empty()){//访问一棵树的开始//  1、访问左路节点,左路节点入栈,后续一次访问左路节点的右子树while(cur){st.push(cur);cur=cur->left;}//一次访问左路节点的右子树TreeNode* top=st.top();st.pop();v.push_back(top->val);//子问题的方式访问右子树cur=top->right;}return v;}
};

三、后序遍历

后序遍历:先遍历一颗树的左子树,然后遍历右子树,最后遍历根节点
在这里插入图片描述

后续遍历序列:4 -> 5 -> 2 -> 6 -> 7 -> 3 -> 1

题目链接

1.递归

分解子问题

class Solution {
public:void postOrder(TreeNode* root,vector<int>& ret){if(root==NULL)return;postOrder(root->left,ret);postOrder(root->right,ret);ret.push_back(root->val);}vector<int> postorderTraversal(TreeNode* root) {vector<int> ret;postOrder(root,ret);return ret;}
};

2.非递归

后续遍历的非递归要比前序和中序遍历的非递归复杂一点,我们要在前面前序遍历和中序遍历非递归的算法上进行一些改进,创建一个变量prev,用来记录访问当前节点的上一个节点,如果当前左路节点的右子树为空或者已经访问过右子树就需将当前接节点出栈,此时的出栈顺序即为后续遍历序列。
在这里插入图片描述
在这里插入图片描述

class Solution {
public:vector<int> postorderTraversal(TreeNode* root) {stack<TreeNode*> st;TreeNode* cur=root;TreeNode* prev=NULL;vector<int> v;while(cur||!st.empty()){//访问一棵树的开始//  1、访问左路节点,左路节点入栈,后续一次访问左路节点的右子树while(cur){st.push(cur);cur=cur->left;}TreeNode* top=st.top();//一个节点右子树为空或者上一个访问节点是右子树的根,说明右子树访问过滤,可以访问根节点了if(top->right==nullptr||top->right==prev){prev=top;v.push_back(top->val);st.pop();}else cur=top->right;}return v;}
};
http://www.yayakq.cn/news/873804/

相关文章:

  • 建网站选服务器网站对比分析
  • 网上注册公司什么网站渝快办官方网站
  • 北碚区建设银行网站一个主机域名可以做多少个网站
  • flash源码网站猫扑网站开发的网游
  • 濮阳免费网站制作网站开发设计的技术
  • 网站开发好公司外贸局合并到哪个局
  • 什么叫宣传型网站营销网站建设专业团队在线服务
  • 建网站 服务器需要安装 tomcat什么是交换链接
  • 国外响应式网站网站页面
  • 用手机可以做网站吗网站打开空白页面
  • 普陀区网站建设前端wordpress建英文站
  • 学淘宝运营大概多少钱优化方案英语答案
  • 西安企业模板网站建设个人的视频网站如何做
  • app网站开发公司的logo风讯网站内容管理系统
  • 网站如何创建建筑设计公司名称起名
  • 做游乐设施模型的网站网站如何在百度搜索
  • 套模板网站价格贵金属十大正规app平台排名
  • 滨州网站建设招聘网站建设 阿里云
  • 浙江住房和城乡建设部网站如何删除自己建的网站
  • 淘宝客免费建网站如何辨别官方网站
  • 福建建设局网站招标ps如何做网页
  • wordpress站群功能南京电商网站设计公司
  • 加强政务门户网站建设wordpress如何加html
  • 北京高端网站设计外包公司自贡跨省特大虚假广告案
  • 网站建设平台讯息铁岭 开原网站建设
  • 福建城建设厅官方网站wordpress手机app登陆
  • 图标网站导航制作怎么做优化网站界面的工具
  • 小企业网站价格湖北专业的网站制作代理商
  • 90设计官方网站网站页脚的制作
  • 网站搭建要求模板怎么做品牌推广网站