LeetCode 演算法學習(13)
阿新 • • 發佈:2018-12-29
題目描述
Given a binary tree, return the inorder traversal of its nodes’ values.
題目大意
對二叉樹進行中序遍歷。
思路分析
這裡我使用非遞迴的寫法,關鍵在於處理好入棧時機和出棧時機。當棧頂元素沒有左子樹時出棧,p轉向其右子樹繼續遍歷。
關鍵程式碼
vector<int> inorderTraversal(TreeNode* root) {
stack<TreeNode*> stackTN;
TreeNode * p = root;
vector<int> result;
while (p != NULL || !stackTN.empty()) {
while (p != NULL) {
stackTN.push(p);
p = p->left;
}
p = stackTN.top();
stackTN.pop();
result.push_back(p->val) ;
p = p->right;
}
return result;
}
總結
利用棧實現非遞迴寫法,可以節省空間,並對演算法效率有一定的提升。需要注意好遍歷指標的指向,以及出棧的條件等問題。