p*****a 发帖数: 147 | |
h*********n 发帖数: 11319 | 2 right child<-> left child?
【在 p*****a 的大作中提到】 : rt
|
W**********r 发帖数: 8927 | 3 用Stack,模拟BT的遍历过程,把节点压到Stack里去 |
p*****a 发帖数: 147 | 4 能详细说一下吗?
【在 W**********r 的大作中提到】 : 用Stack,模拟BT的遍历过程,把节点压到Stack里去
|
g******0 发帖数: 221 | 5 It looks like for each node n, you need to swap the node->left and node->
right. You can use BFS to push all nodes to a queue/array, then process one
node at a time.
Or like WindFollower said, use a stack. |
r******n 发帖数: 170 | 6 感觉可以模仿postorder的iterative 方法写,也应该得加个visited flag
如下:
void mirror(Node* root)
{
if (root == NULL)
return;
mirror(root->left);
mirror(root->right);
Node* tmp =root->left;
root->left=root->right;
root->right=tmp;
}
void mirror_iter(Node* root)
{
if (root == NULL)
return;
stack nodeStack;
nodeStack.push(root);
while (!nodeStack.empty())
{
Node* curr=nodeStack.top();
if (curr->left != NULL && curr->left->visted==false)
{
nodeStack.push(curr->left);
}
else
{
if (curr->right != NULL && curr->right->visited==false)
{
nodeStack.push(curr->right);
}
else
{
curr->visited=true;
Node* tmp = curr->left;
curr->left=curr->right;
curr->right=tmp;
nodeStack.pop();
}
}
}
}
【在 p*****a 的大作中提到】 : 能详细说一下吗?
|