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

深圳专业营销网站公司网站建设做什么

深圳专业营销网站公司,网站建设做什么,vps小学生,深圳市 交易建设中心网站226.翻转二叉树 力扣链接https://leetcode.cn/problems/invert-binary-tree/description/ 题目描述: 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出&am…

226.翻转二叉树

力扣链接icon-default.png?t=N7T8https://leetcode.cn/problems/invert-binary-tree/description/

题目描述:

给你一棵二叉树的根节点 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) {queue<TreeNode *> que;if(root != nullptr) que.push(root);elsereturn root;while(!que.empty()){int size = que.size();for(int i =0; i<size; 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.yayakq.cn/news/140050/

相关文章:

  • 高中男女做羞羞视频网站黑龙江建设网安全员考试报名
  • 合肥市庐阳区住房和城乡建设局网站多梦wordpress
  • 家居企业网站建设资讯网站设计师专业
  • 做网站前端需要编程基础吗如何做关于旅游的网站页面
  • 深圳网站建设知名公司wordpress申请子站
  • 网站建设计入哪个明细科目深圳专业seo
  • 上海找做网站公司哪家好网站建设学什么语言
  • 网站开发技术栈企业网站建设 论文
  • 重庆网站建设入门培训优化合作平台
  • 无极在线网站播放wordpress管理登录
  • 竞猜网站建设直播开放平台登陆
  • 图书馆网站建设汇报长沙优质营销网站建设设计
  • 网络公司代做的网站注意事项wordpress 会员支付
  • 广州建论坛网站门户网站用什么后台系统好
  • 自己做视频会员网站自己怎么建个免费网站吗
  • 怎样才能有自己的网站做淘宝这种网站
  • 做软装找产品上哪个网站企业网站开发的功能
  • 云建造网站电子商务网站如何推广
  • 网站数据采集 源码seo知识点
  • 深圳珠宝品牌网站设计金融网站开发的意义 论文
  • 做ic芯片的要去哪个网站wordpress 主题 500
  • 天行健君子以自强不息网站建设做淘宝美工和网站设计那个好
  • 做网站需要什么服务器配置软件开发专业单词
  • 广州做网站哪家强企业推广是做什么的
  • 深圳品牌营销网站建设android开发基础教程
  • 国内网站空间主机网站维护 代码
  • 做网站的工具 论坛电子商务网站建设如何策划与实施
  • 数据网站建设多少钱浏阳网站建设
  • 做爰全过程免费的视频 网站重庆网站开发哪家专业
  • 移动网站趋势WordPress美图主题