1. 程式人生 > >LeetCode 94. Binary Tree Inorder Traversal 二叉樹的中序遍歷 C++

LeetCode 94. Binary Tree Inorder Traversal 二叉樹的中序遍歷 C++

壓入 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++