LeetCode 94. Binary Tree Inorder Traversal 二叉樹的中序遍歷 C++
阿新 • • 發佈:2019-04-05
壓入 rsa return recursive 使用 rdquo push cto 方法
Given a binary tree, return the inorder traversal of its nodes‘ values.
Example:
Input: [1,null,2,3] 1 2 / 3 Output: [1,3,2]
Follow up: Recursive solution is trivial, could you do it iteratively?
題目中要求使用叠代用法,利用棧的“先進後出”特性來實現中序遍歷。
解法一:(叠代)將根節點壓入棧,當其左子樹存在時,一直將其左子樹壓入棧,直至左子樹為空,將棧頂元素彈出,將其val值放入vector中,再將其右子樹循環上述步驟,直到棧為空。
(C++)
1 vector<int> inorderTraversal(TreeNode* root) { 2 vector<int> m={}; 3 stack<TreeNode*> stack; 4 if(!root) 5 return m; 6 TreeNode* cur=root; 7 while(!stack.empty()||cur){ 8 while(cur){ 9 stack.push(cur);10 cur=cur->left; 11 } 12 cur=stack.top(); 13 m.push_back(cur->val); 14 stack.pop(); 15 cur=cur->right; 16 } 17 return m; 18 }
方法二:使用遞歸(C++)
1 void inorder(vector<int> &m,TreeNode* root){2 if(root==NULL) 3 return; 4 inorder(m,root->left); 5 m.push_back(root->val); 6 inorder(m,root->right); 7 } 8 9 vector<int> inorderTraversal(TreeNode* root) { 10 vector<int> m={}; 11 if(root==NULL) 12 return m; 13 inorder(m,root); 14 return m; 15 }
LeetCode 94. Binary Tree Inorder Traversal 二叉樹的中序遍歷 C++