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?
这道题是中序遍历二叉树,觉得太low的同学可以跳过,题目难度为Medium。大家可以顺带看一下第145题(传送门)后续遍历二叉树。
递归版本比较简单,不再详细说明,具体代码:
class Solution {
void getInorderData(TreeNode* n, vector<int>& ret) {
if(!n) return;
getInorderData(n->left, ret);
ret.push_back(n->val);
getInorderData(n->right, ret);
}
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> ret;
getInorderData(root, ret);
return ret;
}
};
非递归的方法和后续遍历二叉树思路是相通的,后续遍历相对复杂些,建议大家看一下后续遍历的思路(传送门
),这里就不再详述了,具体代码:
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> ret;
stack<TreeNode*> stk;
TreeNode* p = root;
while(p || !stk.empty()) {
while(p) {
stk.push(p);
p = p->left;
}
p = stk.top();
stk.pop();
ret.push_back(p->val);
p = p->right;
}
return ret;
}
};