题解 | #牛群的二叉树排序#
牛群的二叉树排序
https://www.nowcoder.com/practice/a3a8756cbb13493ab4cf5d73c853d5cd
考察的知识点:二叉树的构建;
解答方法分析:
- 首先创建一个根节点,值为-1,并初始化零的计数变量
zeros和一的计数变量ones为0。 - 遍历给定的
cows数组,如果元素为0则零的计数变量加1,否则一的计数变量加1。 - 如果零的计数变量
zeros大于0,则创建一个根的左孩子,并赋值为0,调用makeTree函数构建左子树,参数为左孩子节点、zeros - 1和0。 - 如果一的计数变量
ones大于0,则创建一个根节点的右孩子,并赋值为1,调用makeTree函数构建右子树,参数为右孩子节点、ones - 1和1。 - 返回构建好的二叉树的根节点。
所用编程语言:C++;
完整编程代码:↓
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* };
*/
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param cows int整型vector
* @return TreeNode类
*/
TreeNode* sortCowsTree(vector<int>& cows) {
TreeNode* root = new TreeNode(-1);
int zeros = 0;
int ones = 0;
for (int i = 0; i < cows.size(); i++) {
if (cows[i] == 0) {
zeros++;
} else {
ones++;
}
}
if (zeros > 0) {
root->left = new TreeNode(0);
makeTree(root->left, zeros - 1, 0);
}
if (ones > 0) {
root->right = new TreeNode(1);
makeTree(root->right, ones - 1, 1);
}
return root;
}
void makeTree(TreeNode* root, int count, int flag) {
queue<TreeNode*> q;
q.push(root);
while (count > 0) {
TreeNode* node = q.front();
q.pop();
node->left = new TreeNode(flag);
q.push(node->left);
count--;
if (count > 0) {
node->right = new TreeNode(flag);
q.push(node->right);
count--;
}
}
}
};
查看16道真题和解析