# 【LeetCode】94. Binary Tree Inorder Traversal 解题报告（Python & C++）

id： fuxuemingzhu

## 题目描述

Given a binary tree, return the inorder traversal of its nodes’ values.

For example:

Given binary tree [1,null,2,3],
1
\
2
/
3
return [1,3,2].


Note: Recursive solution is trivial, could you do it iteratively?

## 解题方法

### 方法一：递归

题目要求中序遍历。这里给上递归解法和遍历解法，要背会哦～

如果有不明白的，直接看官方解答，有图文：https://leetcode.com/problems/binary-tree-inorder-traversal/solution/

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
def inorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
def inorder(root):
if root == None:
return None
if root.left != None:
inorder(root.left)
if root.right != None:
inorder(root.right)
inorder(root)


C++代码如下：

/**
* 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) {
inOrder(root);
return res;
}
private:
vector<int> res;
void inOrder(TreeNode* root) {
if (!root) return;
inOrder(root->left);
res.push_back(root->val);
inOrder(root->right);
}
};


### 方法二：迭代

迭代解法需要用到栈。这个方法确实比递归难得多了。我们先把节点所有的左节点放入栈中，然后开始出栈，每次出栈都把栈中的元素放入到结果中，并且把这个结果的右孩子放入栈中。因此，这里的遍历顺序就是左->中->右。

Python代码如下。

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
def inorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
stack = []
while True:
while root:
stack.append(root)
root = root.left
if not stack:
root = stack.pop()
root = root.right


C++代码如下：

/**
* 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) {
stack<TreeNode*> s;
vector<int> res;
TreeNode* p = root;
while (!s.empty() || p) {
if (p) {
s.push(p);
p = p->left;
} else {
TreeNode* t = s.top(); s.pop();
res.push_back(t->val);
p = t->right;
}
}
return res;
}
};


## 日期

2018 年 2 月 8 日
2018 年 12 月 11 日 —— 双十一已经过去一个月了，真快啊。。

还能输入1000个字符

没有更多推荐了，返回首页

私密原因:
请选择设置私密原因
• 广告
• 抄袭
• 版权
• 政治
• 色情
• 无意义
• 其他
其他原因:
120
系统繁忙，请稍后再试

关闭