二叉树反转

来源:互联网 发布:软件设计师好过吗 编辑:程序博客网 时间:2024/06/03 20:51
/*
   Invert a binary tree.


     4
   /   \
  2     7
 / \   / \
1   3 6   9


to
     4
   /   \
  7     2
 / \   / \
9   6 3   1


 */


考虑两种情况
* 立即返回的情况--在root为空,或root的左右子树同时为空时才返回。
* 不立即返回的情况(只需要考虑树的二层,其它用递归)
* 把root的左子树invert,返回lefttree。
* 把root的右子树invert,返回righttree。

* 把root本身的左右子树互换,即root->left=righttree; root->right=lefttree;


#include<stdio.h>
#include <stdlib.h>


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* lefttree = invertTree(root->left);
struct TreeNode* righttree = invertTree(root->right);
root->left = righttree;
root->right = lefttree;
return root;
}


int main(int argc, char *argv[])
{

return 0;

}

0 0