ps: 如果有任何问题可以评论留言,我看到后会及时解答,评论或关注,您的鼓励是我分享的最大动力
转载请注明出处:https://blog.csdn.net/qq_40938301/article/details/87008165
题目描述:
操作给定的二叉树,将其变换为源二叉树的镜像。
输入描述:
二叉树的镜像定义:源二叉树
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) {
}
};
算法思路:
首先可以观察到,源二叉树与其镜像的差异在于左右子树的交换。
实现一个二叉树的左右子树交换可以通过:
/* 伪代码 */
temp = left ;
left = right ;
right = temp;
实现一个二叉树的多层左右子树的交换,则需判断用循环还是递归来实现
循环:循环实现的话,需要有终止的条件,而题中并无其他多余条件去设置循环的终止条件。
递归:递归实现的话,需要有重复和嵌套,其终止条件蕴涵在递归机制里。
左右子树交换是重复;每层的树节点到子树节点是嵌套。
因此采用递归的方法。
实现代码:
/*
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);
}
};
本文详细解析了如何通过递归方法将给定的二叉树转换为其镜像。介绍了二叉树镜像的基本概念,提供了清晰的伪代码及完整的C++实现代码,帮助读者深入理解二叉树的镜像变换算法。

757

被折叠的 条评论
为什么被折叠?



