二叉树的镜像
输出指定二叉树的镜像
输入描述
以二叉树对应的完全二叉树为参照,空白节点处使用#字符填充,使用层次遍历表示二叉树,节点间使用空格分割,如4 2 7 # 3 6 9
输出描述
反转输入的二叉树,输出其镜像表示
示例1
输入
4 2 7 # 3 6 9
输出
4 7 2 9 6 3 #
说明
输入输出采用层次遍历方式,空节点使用#标记填充为完全二叉树
思路:先利用二叉树层序序列直接构建,它的镜像二叉树(每次先构建右子树,再构建左子树),然后层序输出
struct Node
{
char _val;
Node* _left;
Node* _right;
Node(char val)
:_val(val)
, _left(nullptr)
, _right(nullptr)
{}
};
Node* rebuild_image(vector<char>& v)
{
queue<Node*> q;
Node* root = new Node(v[0]);
Node* ret = root;
for (int j = 0; 2 * j + 1 < v.size();j++)
{
if (v[2 * j + 1] != '#')
{
root->_right = new Node(v[2 * j + 1]);
q.push(root->_right);
}
else
{
root->_right = new Node('#');
}
if (v[2 * j + 2] != '#')
{
root->_left = new Node(v[2 * j + 2]);
q.push(root->_left);
}
else
{
root->_left = new Node('#');
}
if (!q.empty())
{
root = q.front();
q.pop();
}
}
return ret;
}
void level(Node* root)
{
queue<Node*> q;
q.push(root);
while (!q.empty())
{
Node* front = q.front();
cout << front->_val << " ";
q.pop();
if (front->_left)
q.push(front->_left);
if (front->_right)
q.push(front->_right);
}
cout << endl;
}