LeetCode 94.Binary Tree Inorder Traversal (二叉樹的中序遍歷)
阿新 • • 發佈:2018-12-12
題目描述:
給定一個二叉樹,返回它的中序 遍歷。
示例:
輸入: [1,null,2,3] 1 \ 2 / 3 輸出: [1,3,2]
進階: 遞迴演算法很簡單,你可以通過迭代演算法完成嗎?
AC C++ Solution: 1.遞迴法:
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ /* 遞迴法 */ class Solution { public: vector<int> inorderTraversal(TreeNode* root) { vector<int> nodes; inorder(root,nodes); return nodes; } private: void inorder(TreeNode* root, vector<int>& nodes) { if(!root) return; inorder(root->left,nodes); //當左子節點為空時,訪問當前節點值 nodes.push_back(root->val); inorder(root->right,nodes); } };
2.堆疊法:
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ /* 堆疊法*/ class Solution { public: vector<int> inorderTraversal(TreeNode* root) { vector<int> vector; stack<TreeNode *> stack; TreeNode *pCurrent = root; while(!stack.empty() || pCurrent) { if(pCurrent) { stack.push(pCurrent); pCurrent = pCurrent->left; } else { pCurrent = stack.top(); stack.pop(); vector.push_back(pCurrent->val); pCurrent = pCurrent->right; } } return vector; } }; };