【树】94. 二叉树的中序遍历
题目:
给定一个二叉树,返回它的中序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [1,3,2]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
解法:
方法一:递归实现
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 vector<int> inorderTraversal(TreeNode* root) 13 { 14 vector<int> result; 15 if (NULL == root) 16 { 17 return result; 18 } 19 20 vector<int> left_result = inorderTraversal(root->left); 21 vector<int> right_result = inorderTraversal(root->right); 22 23 // 注意下面, 需要考虑下 24 for (int i = 0; i < left_result.size(); i++) 25 { 26 result.push_back(left_result[i]); 27 } 28 result.push_back(root->val); 29 for (int i = 0; i < right_result.size(); i++) 30 { 31 result.push_back(right_result[i]); 32 } 33 34 return result; 35 } 36 };
方法二:迭代算法
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 vector<int> inorderTraversal(TreeNode* root) 13 { 14 vector<int> ret; 15 if (NULL == root) 16 { 17 return ret; 18 } 19 20 stack<TreeNode *> trace; 21 TreeNode *tmp = root; 22 23 while (tmp != NULL || trace.empty() != true) 24 { 25 while (tmp != NULL) 26 { 27 trace.push(tmp); 28 tmp = tmp->left; 29 } 30 31 if (trace.empty() != true) 32 { 33 tmp = trace.top(); 34 trace.pop(); 35 ret.push_back(tmp->val); 36 tmp = tmp->right; 37 } 38 } 39 40 return ret; 41 } 42 };

浙公网安备 33010602011771号