在Windows環境下使用鏈表存儲B樹時,如何在畫布上確定每個節點的繪製座標是一個常見難題。開發者嘗試利用樹的遍歷操作,在遍歷到節點時即繪製,但節點的具體位置該如何計算?
採用「右優先遍歷」策略,在遍歷函數中引入一個額外的整型參數 offset(初始值為0)。每當遞歸向右子樹深入時,將 offset 遞增固定步長(如3)。此參數直接作為節點在水平方向的繪製位移量。向左子樹遞歸時同樣遞增 offset,確保左右子樹在畫布上錯開顯示,避免重疊。
void outPutTree(BinaryTreeNode* node, int offset) {
if (node) {
outPutTree(node->rightChild, offset + 3);
// 繪製當前節點,使用 offset 作為 x 座標基準
for (int i = 0; i < offset; ++i) std::cout << ' ';
std::cout << node->data << std::endl;
outPutTree(node->leftChild, offset + 3);
}
}
完整實現包含中序轉後序、後序構建二叉樹、釋放樹等輔助函數,詳見原始代碼鏈接。