Invert a binary tree.
4 / \ 2 7 / \ / \ 1 3 6 9to
4 / \ 7 2 / \ / \ 9 6 3 1
题目大意:翻转二叉树。
解题思路:递归。不过同样是递归,感觉自己写的代码没有别人写的优雅……
代码如下:
//自己写的
void swap(struct TreeNode** a, struct TreeNode** b)
{
struct TreeNode* tmp = *a;
*a = *b;
*b = tmp;
}
struct TreeNode* invertTree(struct TreeNode* root) {
if(root == NULL) return NULL;
if(root->right && root->left){
root->right = invertTree(root->right);
root->left = invertTree(root->left);
swap(&(root->right), &(root->left));
}else if(root->right){
root->right = invertTree(root->right);
swap(&(root->right), &(root->left));
}else if(root->left){
root->left = invertTree(root->left);
swap(&(root->right), &(root->left));
}
}
//别人写的
struct TreeNode* invertTree(struct TreeNode* root) {
if(root == NULL) return NULL;
struct TreeNode *tmp = root->left;
root->left = invertTree(root->right);
root->right = invertTree(tmp);
return root;
}