标签:offer.27 right TreeNode 二叉树 从头再来 mirrorTree root 节点 left
请完成一个函数,输入一个二叉树,该函数输出它的镜像。
二叉树的问题,基本都靠递归来解决!
所以总体思路是:递归的交换每一个节点的左右子节点,当然后从根部向上交换。
/** * 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* mirrorTree(TreeNode* root) { //思路:对于每一个节点都取得左右两个子节点的值,存下来,然后交换。 //一定是每一个节点都交换! //递归终止条件,节点为空,返回空 if(root == nullptr) return nullptr; //反转左右子树 TreeNode* left =mirrorTree(root->left); TreeNode* right = mirrorTree(root->right); //用反转后的右子树代替左子树,反转后的左子树代替右子树 root->left = right; root->right = left; return root; } };
当然还有更简单的写法,借用swap函数,但是最好不要使用...
/** * 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* mirrorTree(TreeNode* root) { if(root == nullptr) return nullptr; mirrorTree(root->left); mirrorTree(root->right); swap(root->left,root->right); return root; } };
《从头再来》
标签:offer.27,right,TreeNode,二叉树,从头再来,mirrorTree,root,节点,left 来源: https://www.cnblogs.com/azie420/p/14856267.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。