leetcode简单题之翻转二叉树

该文章介绍了一种解决LeetCode中的翻转二叉树问题的方法,通过使用队列进行层次遍历,逐层交换节点的左右子节点。在遍历过程中,遇到非空节点就将其左右子节点入队,然后交换它们的位置。算法的时间复杂度为O(NxM),空间复杂度为O(M),其中N为树的深度,M为节点数。
摘要由CSDN通过智能技术生成

题目链接:https://leetcode.cn/problems/invert-binary-tree/

题目是翻转二叉树,即将这颗树上的所有节点的左右节点相互交换

我的思路:我们可以像二叉树的层序遍历一样,使用队列存储每一层的节点,当队列里有元素时,我们取出头部节点,如果该节点有左子节点或者右子节点,将这些存在的节点入队,此时可以定义一个中间节点,用这个中间节点来交换左右子节点。这个题也需要两层循环,第一层循环的结束条件是判断这个存放节点的队列是否为空,第二层循环是这个队列的长度。

代码:

class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
      queue<TreeNode*> q;
      if(root==nullptr)return nullptr;//如果头节点为空,直接返回nullptr
      q.push(root);
      while(!q.empty()){
          int size=q.size();
          while(size--){
              TreeNode *temp=q.front();//取出头部节点
              if(temp->left)q.push(temp->left);//如果有左子节点,入队
              if(temp->right)q.push(temp->right);
              TreeNode *node=temp->left;//利用中间节点来交换这个头部节点的左右子节点
              temp->left=temp->right;
              temp->right=node;
              q.pop();//头部节点出队
          }
      }
      return root;
    }
};

时间复杂度:O(NxM) N为这棵树的深度,M为节点数

空间复杂度:O(M)  M为树的节点数

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值