作業要求:將遞歸前序遍歷的第二個遞歸呼叫(右子樹)消除,改為非遞歸。
void PreOrder(BinTNode *root) {
if (!root) return;
std::stack st;
st.push(root);
while (!st.empty()) {
BinTNode *node = st.top(); st.pop();
visit(node); // 訪問根
if (node->right) st.push(node->right); // 先推右
if (node->left) st.push(node->left); // 再推左,左先出棧
}
}
參考詳細推導:二叉樹前序遍歷非遞歸演算法