16.二叉树的镜像(第三次做还是要看思路)

来源:互联网 发布:淘宝网站域名 编辑:程序博客网 时间:2024/05/16 14:53
二叉树的镜像
  • 参与人数:4644时间限制:1秒空间限制:32768K
  •  算法知识视频讲解

题目描述

操作给定的二叉树,将其变换为源二叉树的镜像。 
输入描述:
二叉树的镜像定义:源二叉树         8       /  \      6   10     / \  / \    5  7 9 11    镜像二叉树        8       /  \      10   6     / \  / \    11 9 7  5
这道题难度一般,主要是尾递归的掌握以及递归退出条件的判断
/*struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}};*/class Solution {public:    void Mirror(TreeNode *pRoot) {if ( pRoot == NULL )            return ;                if ( pRoot->left == NULL && pRoot->right == NULL )            return ;                TreeNode* tmp = pRoot->left ;        pRoot->left = pRoot->right ;        pRoot->right = tmp ;                if ( pRoot->left != NULL ) {            Mirror( pRoot->left ) ;        }        if ( pRoot->right != NULL ) {            Mirror( pRoot->right ) ;        }    }};


第二次做:
先搭框架,把交换节点的代码写出来
class Solution {public:    void Mirror(TreeNode *pRoot) {                TreeNode* tmp = pRoot->left ;        pRoot->left = pRoot->right ;        pRoot->right = tmp ;            }};

再写尾递归
class Solution {public:    void Mirror(TreeNode *pRoot) {                TreeNode* tmp = pRoot->left ;        pRoot->left = pRoot->right ;        pRoot->right = tmp ;                Mirror( pRoot->left ) ;        Mirror( pRoot->right ) ;    }};

最后别忘了递归退出条件:
class Solution {public:    void Mirror(TreeNode *pRoot) {if ( pRoot == NULL ) return ;                TreeNode* tmp = pRoot->left ;        pRoot->left = pRoot->right ;        pRoot->right = tmp ;                Mirror( pRoot->left ) ;        Mirror( pRoot->right ) ;    }};

第三次做:
/*struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}};*/class Solution {public:    void Mirror(TreeNode *pRoot) {if ( pRoot == NULL ) return ;                TreeNode* tmp = pRoot->left ;        pRoot->left = pRoot->right ;        pRoot->right = tmp ;                Mirror( pRoot->left ) ;        Mirror( pRoot->right ) ;    }};


0 0