翻译

将下图中上面的二叉树转换为以下的形式。详细为每一个左孩子节点和右孩子节点互换位置。

原文

如上图

分析

每次关于树的题目出错都在于边界条件上……所以这次细致多想了一遍:

void swapNode(TreeNode* tree) {
if (tree == NULL || (tree->left == NULL && tree->right == NULL)) {}
else if (tree->left == NULL && tree->right != NULL) {
TreeNode* temp = tree->right;
tree->left = temp;
tree->right = nullptr;
}
else if (tree->right == NULL && tree->left != NULL) {
TreeNode* temp = tree->left;
tree->right = temp;
tree->left = nullptr;
}
else {
TreeNode* temp = tree->left;
tree->left = tree->right;
tree->right = temp;
}
}

不过这样还不够,它不过互换了一次。所以我们要用到递归:

if(tree->left != NULL)
swapNode(tree->left);
if(tree->right != NULL)
swapNode(tree->right);

最后在题目给定的函数内部调用自己写的这个递归函数就好。

TreeNode* invertTree(TreeNode* root) {
if (root == NULL) return NULL;
swapNode(root);
return root;
}

代码

/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
void swapNode(TreeNode* tree) {
if (tree == NULL || (tree->left == NULL && tree->right == NULL)) {}
else if (tree->left == NULL && tree->right != NULL) {
TreeNode* temp = tree->right;
tree->left = temp;
tree->right = nullptr;
}
else if (tree->right == NULL && tree->left != NULL) {
TreeNode* temp = tree->left;
tree->right = temp;
tree->left = nullptr;
}
else {
TreeNode* temp = tree->left;
tree->left = tree->right;
tree->right = temp;
}
if (tree->left != NULL)
swapNode(tree->left);
if (tree->right != NULL)
swapNode(tree->right);
} TreeNode* invertTree(TreeNode* root) {
if (root == NULL) return NULL;
swapNode(root);
return root;
}
};

学习

自己的解决方式还是太0基础,所以来学习学习大神的解法:

TreeNode* invertTree(TreeNode* root) {

    if(nullptr == root) return root;

    queue<TreeNode*> myQueue;   // our queue to do BFS
myQueue.push(root); // push very first item - root while(!myQueue.empty()){ // run until there are nodes in the queue
TreeNode *node = myQueue.front(); // get element from queue
myQueue.pop(); // remove element from queue if(node->left != nullptr){ // add left kid to the queue if it exists
myQueue.push(node->left);
}
if(node->right != nullptr){ // add right kid
myQueue.push(node->right);
} // invert left and right pointers
TreeNode* tmp = node->left;
node->left = node->right;
node->right = tmp; }
return root;
}

争取以后少用递归了。加油!

LeetCode 226 Invert Binary Tree(转换二叉树)的更多相关文章

  1. leetcode 226 Invert Binary Tree 翻转二叉树

    大牛没有能做出来的题,我们要好好做一做 Invert a binary tree. 4 / \ 2 7 / \ / \ 1 3 6 9 to 4 / \ 7 2 / \ / \ 9 6 3 1 Tri ...

  2. Leetcode 226 Invert Binary Tree python

    题目: Invert a binary tree. 翻转二叉树. 递归,每次对节点的左右节点调用invertTree函数,直到叶节点. python中也没有swap函数,当然你可以写一个,不过pyth ...

  3. LeetCode 226. Invert Binary Tree (反转二叉树)

    Invert a binary tree. 4 / \ 2 7 / \ / \ 1 3 6 9 to 4 / \ 7 2 / \ / \ 9 6 3 1 Trivia:This problem was ...

  4. 【LeetCode】226. Invert Binary Tree 翻转二叉树(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归 迭代 日期 题目地址: https://lee ...

  5. Leetcode 226 Invert Binary Tree 二叉树

    交换左右叶子节点 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * ...

  6. Leetcode 226. Invert Binary Tree(easy)

    Invert a binary tree. 4 / \ 2 7 / \ / \ 1 3 6 9 to 4 / \ 7 2 / \ / \ 9 6 3 1 Trivia:This problem was ...

  7. LeetCode 226 Invert Binary Tree 解题报告

    题目要求 Invert a binary tree. 题目分析及思路 给定一棵二叉树,要求每一层的结点逆序.可以使用递归的思想将左右子树互换. python代码 # Definition for a ...

  8. 226. Invert Binary Tree 翻转二叉树

    [抄题]: Invert a binary tree. 4 / \ 2 7 / \ / \ 1 3 6 9 to 4 / \ 7 2 / \ / \ 9 6 3 1 [暴力解法]: 时间分析: 空间分 ...

  9. Leetcode 226. Invert Binary Tree

    Invert a binary tree. 4 / \ 2 7 / \ / \ 1 3 6 9 to 4 / \ 7 2 / \ / \ 9 6 3 1 class Solution(object): ...

随机推荐

  1. 图论trainning-part-1 G. Stockbroker Grapevine

    G. Stockbroker Grapevine Time Limit: 1000ms Memory Limit: 10000KB 64-bit integer IO format: %lld     ...

  2. [uiautomator篇] 基类

      package com.softwinner.performance.benchmark; /** * UiAssistant public class * @author liuzhipeng ...

  3. IIS中如何应用程序启用https协议

    首先已经安装完了SSL证书 1.找到需要添加的站点,右击 ---> 编辑绑定-->添加--->选择  ""https"-->选择"SSL ...

  4. [luoguP1415] 拆分数列(DP)

    传送门 t(i,j)表示下标从i到j的数 d[i]表示以i结尾的最小的数的下标 d[i]=max(j) (1<=j<=i && t(d[j-1],j-1)<t(j,i ...

  5. 算法复习——虚树(消耗战bzoj2286)

    题目: Description 在一场战争中,战场由n个岛屿和n-1个桥梁组成,保证每两个岛屿间有且仅有一条路径可达.现在,我军已经侦查到敌军的总部在编号为1的岛屿,而且他们已经没有足够多的能源维系战 ...

  6. LeetCode OJ--Reverse Linked List II

    http://oj.leetcode.com/problems/reverse-linked-list-ii/ 链表的操作 #include <iostream> using namesp ...

  7. 用delphi写多屏幕程序

    http://blog.csdn.net/zyyjc/article/details/6530728 别现在有些POS机是双屏幕的(比如卡西瓦POS机),一个屏幕可以当顾客显示屏用,当闲时也可以显示一 ...

  8. Spring Boot 2 快速教程:WebFlux 集成 Mongodb(四)

    摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 这是泥瓦匠的第104篇原创 文章工程:* JDK 1.8* M ...

  9. ubuntu远程桌面设置

    一.服务器端电脑设置: 1.在搜索端搜索desktop sharing,然后设置后退出 二.客户端电脑设置: 1.在搜索端搜索remmina remote desktop client 2.如图设置: ...

  10. LeetCode:926. 将字符串翻转到单调递增

    暴力法超时:思想:动态规划 public int minFlipsMonoIncrb(String S) { int result = S.length(); for (int i = 0; i &l ...