使用队列做,保存当前的节点,这个方法我也是最喜欢的浙大何老头教法。
一开始没看懂题,以为光输出来就行,题的意思应该是改编整个树的结构,所以要swap左右节点。
class Solution {
public:
TreeNode* mirrorTree(TreeNode* root) {
queue<TreeNode*> q;
if(root)
{
q.push(root);
}
while(q.size())
{
//这个是精髓,保留当前头在哪,然后再pop出去。
TreeNode* tr = q.front();
q.pop();
//改变树的结构,交换左右节点
swap(tr->left,tr->right);
if(tr->left)
{
q.push(tr->left);
}
if(tr->right)
{
q.push(tr->right);
}
}
return root;
}
};
队列:queue<类型> 先处理头 , 新元素后入,跟现实中的排队一样。
树:tree 结构体 left right val