牛客网&剑指Offer&二叉树的镜像
代码实现
/*
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 == nullptr)
return ;
if(pRoot->left == nullptr && pRoot->right == nullptr)
return;
TreeNode *exTreeNode = pRoot->left;
pRoot->left = pRoot->right;
pRoot->right = exTreeNode;
if (pRoot->left != nullptr)
Mirror(pRoot->left);
if (pRoot->right != nullptr)
Mirror(pRoot->right);
}
};
编程笔记
- 代码实现解题思路:1.前序遍历这棵树的每一个节点;2.如果遍历到的节点有子节点,交换它的两个子节点;3.交换完所有非叶节点的左、右子节点后,就可以得到树的镜像。
- 凭空想象很难找出解题思路,可以通过画图分析。
- 交换节点并不是交换数值,而是交换地址。
- 熟悉树的基础操作以及递归。