题目:
Invert a binary tree.
4 / \ 2 7 / \ / \ 1 3 6 9to
4 / \ 7 2 / \ / \ 9 6 3 1
分析:
使用递归是一种很简单的解决这个问题的方式,但是同样可以和队列结合使用非递归算法。
代码:
递归:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
struct TreeNode* invertTree(struct TreeNode* root) {
if(root==NULL)return;
else {
invertTree(root->left);
invertTree(root->right);
struct TreeNode* tmp=root->left;
root->left=root->right;
root->right=tmp;
return root;
}
}
struct TreeNode* invertTree(struct TreeNode* root) {
if(root==NULL)return;
struct TreeNode * tmp = root->left;
root->left = invertTree(root->right);
root->right = invertTree(tmp);
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:
TreeNode* invertTree(TreeNode* root) {
queue<TreeNode*> tree;
if(root==NULL)return NULL;
tree.push(root);
while(tree.size()>0){
TreeNode* tmpRoot=tree.front();
tree.pop();
if(tmpRoot->left)tree.push(tmpRoot->left);
if(tmpRoot->right)tree.push(tmpRoot->right);
TreeNode* tmp=tmpRoot->left;
tmpRoot->left=tmpRoot->right;
tmpRoot->right=tmp;
}
return root;
}
};