필기시험 문제--층차 입력 두 갈래 나무
형식 입력:
첫 번째 줄 기대치
두 번째 줄은 층차순으로 훑어보는 순서에 따라 완전한 두 갈래 나무를 보여 줍니다.
입력:
구
6 3 1 # # 4 1 # # # # # # # 1
출력:
6 3
6 1 1 1
#define _CRT_SECURE_NO_WARINGS
#include
#include
#include
#include
#include
using namespace std;
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
void Find(TreeNode* root, int expectNumber, vector> &res, vector &path)
{
path.push_back(root->val);
expectNumber -= root->val;
if (!root->left && !root->right)
{
if (expectNumber == 0)
res.push_back(path);
}
if (root->left)
Find(root->left, expectNumber, res, path);
if (root->right)
Find(root->right, expectNumber, res, path);
path.pop_back();
}
vector> FindPath(TreeNode* root, int expectNumber) {
vector> res;
vector path;
if (root)
Find(root, expectNumber, res, path);
return res;
}
TreeNode *ConstructBinaryTree(vector &arr, int len, int i) {
if (len < 1)return NULL;
TreeNode *root = NULL;
if (i < len && arr[i] != "#") {
int val;
stringstream ss;
ss << arr[i];
ss >> val;
root = new TreeNode(val);
if (root == NULL) return NULL;
root->left = ConstructBinaryTree(arr, len, 2 * i + 1);
root->right = ConstructBinaryTree(arr, len, 2 * i + 2);
}
return root;
}
void PreOrderTra(TreeNode *root) //
{
if (root != NULL)
{
cout << root->val << " ";
PreOrderTra(root->left);
PreOrderTra(root->right);
}
}
int main()
{
int expectNum;
cin >> expectNum;
vector vec;
string input;
while (cin >> input)
{
vec.push_back(input);
if (getchar() == '
') break;
}
TreeNode* root = ConstructBinaryTree(vec, (int)vec.size(), 0);
//PreOrderTra(root);
vector> res = FindPath(root, expectNum);
for (int i = 0; i < (int)res.size(); i++)
{
for (int j = 0; j < (int)res[i].size(); j++)
cout << res[i][j] << " ";
cout << endl;
}
system("pause");
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.