作為考官肛鹏,面試常會考察應(yīng)試者二叉樹遍歷相關(guān)算法逸邦,出提示。突發(fā)奇想在扰,如果給定一個數(shù)組缕减,如何將已知數(shù)據(jù)構(gòu)建成二叉樹,思考5秒覺得還上有一定的難度芒珠。并且網(wǎng)上刷題也少有類似代碼桥狡;
簡單寫了一段,寬度優(yōu)先構(gòu)建方式皱卓。
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;
}