【树】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 };

 

posted @ 2020-05-02 10:20  梦醒潇湘  阅读(171)  评论(0)    收藏  举报