将二叉树反转,可以考虑递归,也可以考虑非递归。用递归实现的话也就短短几句代码即可实现,比较好想,也比较好实现,这也是为什么这道题被定义为easy的等级。没试过非递归的解法,这里仅用递归解法的三种语言C,C++,java加以实现。
(Java语言实现)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public TreeNode invertTree(TreeNode root) {
if(root==null||root.left==null&&root.right==null)
return root;
TreeNode left = invertTree(root.right);
TreeNode right = invertTree(root.left);
root.left = left;
root.right = right;
return root;
}
}
(C语言实现)
/**
* 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 || root->left==NULL && root->right==NULL)
return root;
struct TreeNode* temp = root->left;
root->left = invertTree(root->right);
root->right = invertTree(temp);
return root;
}
(C++语言实现)
/**
* 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)||(!root->left&&!root->right))
return root;
TreeNode* left = invertTree(root->right);
TreeNode* right = invertTree(root->left);
root->left = left;
root->right = right;
return root;
}
};