進(jìn)場(chǎng)遇到深度(廣度)有限遍歷二叉樹(shù)的考題炭剪,爛大街。如果換個(gè)形式,給定一個(gè)數(shù)組如何構(gòu)造一個(gè)二叉樹(shù)涯冠?
struct BTree {
double data;
BTree* ltree;
BTree* rtree;
};
std::vector<double> data_array(0, 100);
Btree* head = nullptr;
bool TreeConstruct(std::vector<double>* data_aray, Btree* head) {
if (!data_array) {
return false;
}
std::queue<BTree*> que;
BTree* head = new BTree;
que.push_back(head);
for (int i = 0; i < data_array.size(); i++) {
if (que.is_empty()) {
break;
}
BTree* tmp_node =que.begin();
que.pop();
tmp_node->data = data_array.at(i);
if (que.size() <= data_array.size() - i - 1) {
BTree* lnode = new BTree;
que.push_back(lnode);
tmp_node->ltree = lnode;
}
if (que.size() < data_array.size() - i - 1) {
BTree* lnode = new BTree;
BTree* rnode = new BTree;
que.push_back(lnode);
que.push_back(rnode);
tmp_node->ltree = lnode;
tmp_node->rtree = rnode;
}
}
return true;
}