您的位置:首页 > Web前端

剑指offer(10)-打印二叉树的镜像

2016-10-14 22:20 316 查看
题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。二叉树的结点定义如下:

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)
{
TreeNode* temp;
temp = pRoot->right;
pRoot->right = pRoot->left;
pRoot->left = temp;

}
cout << pRoot->val;
Mirror(pRoot->left);
Mirror(pRoot->right);

}
};


如何用循环写呢?

class Solution {
public:
void Mirror(TreeNode *pRoot) {
if (pRoot == NULL)
return;
stack<TreeNode*> s;
s.push(pRoot);
while (s.size() != 0)
{
TreeNode* tree = s.top();
s.pop();
if (tree->left != NULL || tree->right != NULL)
{
TreeNode* temp;
temp = tree->left;
tree->left = tree->right;
tree->right = temp;
}
cout << pRoot->val;
if (tree->left != NULL)
s.push(tree->left);
if (tree->right != NULL)
s.push(tree->right);
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: