LeetCode 226 Invert Binary Tree(转换二叉树)
翻译
将下图中上面的二叉树转换为以下的形式。详细为每一个左孩子节点和右孩子节点互换位置。
原文
如上图
分析
每次关于树的题目出错都在于边界条件上……所以这次细致多想了一遍:
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(转换二叉树)的更多相关文章
- 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 ...
- Leetcode 226 Invert Binary Tree python
题目: Invert a binary tree. 翻转二叉树. 递归,每次对节点的左右节点调用invertTree函数,直到叶节点. python中也没有swap函数,当然你可以写一个,不过pyth ...
- 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 ...
- 【LeetCode】226. Invert Binary Tree 翻转二叉树(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归 迭代 日期 题目地址: https://lee ...
- Leetcode 226 Invert Binary Tree 二叉树
交换左右叶子节点 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * ...
- 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 ...
- LeetCode 226 Invert Binary Tree 解题报告
题目要求 Invert a binary tree. 题目分析及思路 给定一棵二叉树,要求每一层的结点逆序.可以使用递归的思想将左右子树互换. python代码 # Definition for a ...
- 226. Invert Binary Tree 翻转二叉树
[抄题]: Invert a binary tree. 4 / \ 2 7 / \ / \ 1 3 6 9 to 4 / \ 7 2 / \ / \ 9 6 3 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 class Solution(object): ...
随机推荐
- HDU 5016 Mart Master II
Mart Master II Time Limit: 6000ms Memory Limit: 65536KB This problem will be judged on HDU. Original ...
- TOJ 2446: Mint
2446: Mint Time Limit(Common/Java):2000MS/20000MS Memory Limit:65536KByteTotal Submit: 4 ...
- HLG 2025
确定大小 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 50(15 users) Total Accepted: 12(11 user ...
- DuiLib DirectUI 界面库
国内首个开源 的directui 界面库,开放,共享,惠众,共赢,遵循bsd协议,可以免费用于商业项目,目前支持Windows 32 .Window CE.Mobile等平台. Duilib 是一款强 ...
- HDU-4847 Wow! Such Doge!,模拟!
Wow! Such Doge! 题意:给定的字符串中doge出现了多少次,直接模拟即可,不用KMP. char s[N]; int main() { // int n; int ans=0; whil ...
- 九度oj 题目1102:最小面积子矩阵
题目描述: 一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵(矩阵中元素个数为矩阵面积) 输入: 每个案例第一行三个正整数N,M<=100,表示矩阵大小,和一个整数K接下来 ...
- 【转】Eric's并发用户数估算与Little定律的等价性
转自:http://www.cnblogs.com/hundredsofyears/p/3360305.html 在国内性能测试的领域有一篇几乎被奉为大牛之作的经典文章,一个名叫Eric Man Wo ...
- FZU 2186 小明的迷宫 【压状dp】
Problem Description 小明误入迷宫,塞翁失马焉知非福,原来在迷宫中还藏着一些财宝,小明想获得所有的财宝并离开迷宫.因为小明还是学生,还有家庭作业要做,所以他想尽快获得所有财宝并离开迷 ...
- mybatis学习(一)——mybatis简介
1.简介 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBati ...
- docker管理工具推荐(linux和windows)
1.windows. 下载dokcer toolbox即可 2.linux 推荐rancher.安装链接参考:http://www.kaimingwan.com/post/rong-qi-yu-ron ...