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

网站建设捌金手指下拉十四html中秋节网页制作代码

网站建设捌金手指下拉十四,html中秋节网页制作代码,潍坊制作网站,太原做网站个人226.翻转二叉树 力扣链接https://leetcode.cn/problems/invert-binary-tree/description/ 题目描述#xff1a; 给你一棵二叉树的根节点 root #xff0c;翻转这棵二叉树#xff0c;并返回其根节点。 示例 1#xff1a; 输入#xff1a;root [4,2,7,1,3,6,9] 输出 给你一棵二叉树的根节点 root 翻转这棵二叉树并返回其根节点。 示例 1 输入root [4,2,7,1,3,6,9] 输出[4,7,2,9,6,3,1]示例 2 输入root [2,1,3] 输出[2,3,1]示例 3 输入root [] 输出[] 思路分析 翻转二叉树其实就把每一个节点的左右孩子交换一下就可以了。注意是每一个节点的左右子节点。这就可以用到前面所将的二叉树递归遍历和层序遍历。下面分别使用前序递归后序递归和层序遍历来实现。 前序递归实现 先回顾一下递归三部曲 1. 确定递归函数参数及返回值 2. 确定递归终止条件 3. 确定单层递归的逻辑操作有哪些 首先对于函数参数由于要遍历二叉树所以要有一个TreeNode*指针来接收根节点由于不需要对元素提取或其他操作所以不再需要其他参数。其次由于题目要求返回翻转后的根节点所以返回值类型为TreeNode*。 TreeNode* invertTree(TreeNode* root) 第二递归何时终止当遇到要遍历的节点的指针为nullptr时遍历终止。这里的root不仅表示根节点还可以表示遍历过程中左右子树对应的根节点。 if (root NULL) return root; 第三单层递归要做哪些操作前序遍历首先就要交换左右子节点然后递归调用本函数分别对左右子树进行同样的操作然后返回root。 swap(root-left, root-right); invertTree(root-left); invertTree(root-right); return 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://递归前序遍历第一步确定递归函数参数以及返回值TreeNode* invertTree(TreeNode* root) {//第二步确定递归终止条件。当前节点指针为空递归结束if(root nullptr) return root;//第三步确认单层递归的逻辑//前序遍历swap(root-left, root-right); //中交换invertTree(root-left); //左递归invertTree(root-right); //右递归return 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://递归后序遍历第一步确定递归函数参数以及返回值TreeNode* invertTree(TreeNode* root) {//第二步确定递归终止条件。当前节点指针为空递归结束if(root nullptr) return root;//第三步确认单层递归的逻辑//后序遍历 invertTree(root-left); //左递归invertTree(root-right); //右递归swap(root-left, root-right); //中交换return root;} }; 中序递归实现需要注意左中右的右对应的指针 class Solution { public:TreeNode* invertTree(TreeNode* root) {if (root NULL) return root;invertTree(root-left); // 左swap(root-left, root-right); // 中invertTree(root-left); // 注意 这里依然要遍历左孩子因为中间节点已经翻转了return root;} }; 层序遍历实现 class Solution { public://层序遍历需要借助队列queueTreeNode* invertTree(TreeNode* root) {queueTreeNode * que;if(root ! nullptr) que.push(root);elsereturn root;while(!que.empty()){int size que.size();for(int i 0; isize; i){TreeNode * node que.front();//注意先交换再入队左右子节点。否则会先遍历右节点 swap(node-left, node-right);if(node-left) que.push(node-left);if(node-right) que.push(node-right); que.pop();}}return root;} }; 本人在写代码的时候曾经多给交换前加了个条件即 //注意先交换再入队左右子节点。否则会先遍历右节点 if(node-left!nullptr node-right ! nullptr)swap(node-left, node-right); 想的是当前节点的左右节点均存在时才进行交换但是程序未通过 错误原因是程序要实现的代码时即使左右子节点未能同时存在也能完成交换和nullptr交换。如下图所示 所以这个加上的前提条件是不正确的因此需要删除。
http://www.pierceye.com/news/574070/

相关文章:

  • 网站建设需要多少钱知乎企业管理软件行业未来的发展
  • 网站建设与管理 自考百度网站地图生成
  • 在线优化网站源码站
  • 中企动力做网站一次性付款零基础学室内设计
  • 企炬网站wordpress会员付费插件
  • 在哪里购买虚拟空间建设网站网页设计培训机构培训费
  • 网站建设的色彩搭配做网站赚钱吗 怎么赚
  • 门头沟富阳网站建设西安企业电话
  • 电子商务网站建设概括湘潭专业seo优化推荐
  • 炫彩发光字制作免费网站动漫制作就业方向
  • 阿里巴巴可以做网站吗网站的可用性
  • 云虚拟主机怎么做2个网站装饰工程施工
  • 网站备案查询流程wordpress手机页面没有注册
  • 辽宁城乡建设集团官方网站精品课程网站建设
  • 威海 网站建设个人做网站可以盈利么
  • 机关网站源码网站建设 备案什么意思
  • 做理财的网站有哪些怎么弄数据库备份做网站
  • 网站不接入备案易企互联网站建设
  • 那种网站打不开北京网站建设找华网天下
  • 网站建设seo优化浙江网站名称怎么收录
  • 天津网站制作工具想自己做网站 有免费的吗
  • 宝塔织梦网站建设求网站备案照片
  • 聊城住房和城乡建设厅网站研发项目管理软件
  • 国投集团网站开发杭州网站界面设计
  • 做关于什么的网站莆田网站建设解决方案
  • 湖南长沙做网站那些网站可以做反链
  • 成都金牛网站建设公司高端网站配色
  • 做喜报的网站设计师的工作内容
  • 济南网站建设工作wordpress 资讯
  • 网站调用数据库平台公司名单