模板网站配置文件朋友圈推广平台
二叉树的镜像
输出指定二叉树的镜像
输入描述
以二叉树对应的完全二叉树为参照,空白节点处使用#字符填充,使用层次遍历表示二叉树,节点间使用空格分割,如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;
}