力扣-翻转二叉树

Posted 只会C的码农

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了力扣-翻转二叉树相关的知识,希望对你有一定的参考价值。

今天来看一道力扣翻转二叉树的题,做完这道题,你可以超越世界顶级程序员,哈哈哈,原因下面再说。(其实我做了,我照样被字节跳动面试官按在地上摩擦,终归是菜,不过唯一的收获是知道自己现在准备的事方向没偏,还有机会,两个月以后再战)。

下面先看看题目,翻转二叉树就是左右子树相互调换,翻转嘛,生活中很多例子,换个方向嘛。

趣闻科普:我要说的就是这个,这位大佬是开发的mac包管理器那么牛批,居然就是因为做不出这道题被谷歌拒绝,转身怒去了苹果公司,你做出来不就超越他了吗?是不是很自豪

力扣-翻转二叉树

大佬的软件介绍,还可以百度查询一下,应该用mac的小伙伴都深有体会吧。


下面我们看一下解题方法,主要三中,递归,迭代,还有就是层序遍历。

方法一:递归方法:自己调用自己

代码如下:

/**
* 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 == NULL)
      {
           return root;
      }
       //结点不为空的话就交换左右子树
       swap(root->left,root->right);  //交换左右子节点
       invertTree(root->left);
       invertTree(root->right);

       return root;
  }
};
方法二:迭代
//方法二:迭代法

   TreeNode* invertTree(TreeNode* root) {
       stack<TreeNode*>st;
       if(root !=NULL)
      {
           st.push(root);
      }
       while(!st.empty())
      {
           TreeNode * node = st.top();  //取出栈顶结点
           st.pop();
           swap(node->left,node->right);  //交换结点
           if(node->left)
          {
               st.push(node->left);
          }
           if(node->right)
          {
               st.push(node->right);
          }
      }
       return root;
方法三:层序遍历
 //方法三:层序遍历

   TreeNode* invertTree(TreeNode* root) {
       queue<TreeNode *>que;
       if(root!=NULL)
      {
           que.push(root);
      }
       while(!que.empty())
      {
           TreeNode *node = que.front();
           que.pop();
           swap(node->left,node->right);
           if(node->left)
          {
               que.push(node->left);
          }
           if(node->right)
          {
               que.push(node->right);
          }
      }
       return root;

我们再来看看效率,一看还是递归执行用时最短,速度最快,内存消耗的话都差不多,这些参数还跟电脑性能有关。

OK,今天这道题就到这里,你学到了吗?各位小伙伴早点休息。(明天研三的答辩了,距离毕业365天)

以上是关于力扣-翻转二叉树的主要内容,如果未能解决你的问题,请参考以下文章

力扣-翻转二叉树

力扣(LeetCode)226. 翻转二叉树

精选力扣500题 第58题 LeetCode 226. 翻转二叉树c++/java详细题解

LeetCode 0226. 翻转二叉树

226. 翻转二叉树-后序遍历-简单

LeetCode刷题226-简单-翻转二叉树