题目:
难度:简单
翻转一棵二叉树。
示例:
题解:
解法一:广度优先遍历+队列
解题思路
- 利用队列对结点进行存储。
- 以广度优先遍历的方式,对每一个结点的左右结点交换位置,并将子节点存入队列中。
- 直到队列为空遍历结束。
/**
* 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:
TreeNode* invertTree(TreeNode* root) {
if(!root) return root;
queue<TreeNode*> que;
que.push(root);
while(que.size()){
int len = que.size();
for(int i = 0; i < len; i++){
TreeNode* node = que.front();
TreeNode* left = NULL;
TreeNode* right = NULL;
que.pop();
if(node->left) {
left = node->left;
que.push(left);
}
if(node->right){
right = node->right;
que.push(right);
}
node->right = left;
node->left = right;
}
}
return root;
}
};
解法二:递归
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if(!root) return NULL;
TreeNode* left = invertTree(root->left);
TreeNode* right = invertTree(root->right);
root->left = right;
root->right = left;
return root;
}
};