题目::给出一棵二叉树,返回其中序遍历
1、递归法
这是思路最简单的方法,容易想到并且容易实现。递归的终止条件是当前节点是否为空。首先递归调用遍历左子树,然后访问当前节点,最后递归调用右子树。代码如下:
[cpp] view plain copy
//recursive
class Solution1 {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> ret;
if(root==NULL)return ret;
inorderHelper(ret,root);
return ret;
}
private:
void inorderHelper(vector<int>& ret,TreeNode* root)
{
if(root==NULL)return;
inorderHelper(ret,root->left);
ret.push_back(root->val);
inorderHelper(ret,root->right);
}
};
*/
public class Solution {
public ArrayList<Integer> inorderTraversal(TreeNode root){
Stack<TreeNode> stack = new Stack<TreeNode>();
ArrayList<Integer> res = new ArrayList<Integer>();
while(root != null || stack.empty()){
while(root != null){
stack.push(root);
root = root.left;
}
if(!stack.empty()){
root = stack.pop();
res.add(root.val);
root = root.right;
}
}
return res;
}
}