LeetCode 226 Invert Binary Tree(转换二叉树)
来源:互联网 发布:超次元矩阵怎么玩 编辑:程序博客网 时间:2024/06/08 06:16
翻译
将下图中上面的二叉树转换为下面的形式,具体为每个左孩子节点和右孩子节点互换位置。
原文
如上图
分析
每次关于树的题目出错都在于边界条件上……所以这次仔细多想了一遍:
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; }};
学习
自己的解决方案还是太初级,所以来学习学习大神的解法:
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;}
争取以后少用递归了,加油!
1 0
- LeetCode 226 Invert Binary Tree(转换二叉树)
- LeetCode 226 Invert Binary Tree(翻转二叉树)
- [LeetCode][二叉树]Invert Binary Tree
- LeetCode Invert Binary Tree 翻转二叉树
- 【LeetCode】Invert Binary Tree 翻转二叉树
- leetcode 226 Invert Binary Tree 翻转二叉树
- Leetcode 226 Invert Binary Tree 反转二叉树
- LeetCode OJ 之 Invert Binary Tree(反转二叉树)
- leetcode系列(11)二叉树翻转 Invert Binary Tree
- LeetCode 226. Invert Binary Tree(反转二叉树)
- 【LeetCode-面试算法经典-Java实现】【226-Invert Binary Tree(反转二叉树)】
- 翻转二叉树(Invert Binary Tree)
- Invert Binary Tree(翻转二叉树)
- Invert Binary Tree(反转二叉树)
- 反转二叉树(Invert Binary Tree)
- LeetCode(226)Invert Binary Tree
- LeetCode(226)Invert Binary Tree
- [LeetCode] Invert Binary Tree - 二叉树翻转系列问题
- make命令详解
- hdu 5600 N bulbs
- LR 12 手机录制APP后,使用LR11 进行性能测试
- lua如何在游戏中保存上一次游戏状态
- Swift字符串分割
- LeetCode 226 Invert Binary Tree(转换二叉树)
- 自己用的一个mysql存储过程
- bzoj1088[SCOI2005]扫雷Mine
- dedecms 5.7sp1中/plus/download.php下载重定向漏洞
- Google上不了,怎么办呢?
- 训练深度网络的梯度弥散及梯度膨胀问题
- android之旅10 网络编程2: HttpClient与github的封装
- linux(centos)搭建SVN服务器
- 【看书】程序计时器