1. 程式人生 > >LeetCode 演算法學習(13)

LeetCode 演算法學習(13)

題目描述

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; }

總結

利用棧實現非遞迴寫法,可以節省空間,並對演算法效率有一定的提升。需要注意好遍歷指標的指向,以及出棧的條件等問題。