题目描述
解题思路 ❤❤
① 由于在“栈”标签下,没想递归方法… (而且List还用错了)
②栈方法和递归很相似,一直入栈,直到左节点为空就出栈,然后直到右节点返回未出栈的中节点。
JAVA代码(递归方法)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; } //注意这个命名方法
* }
*/
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>(); //List:接口,ArrayList是接口的一个实现类。即数组
mid(root,res);
return res;
}
void mid(TreeNode root, List<Integer> res){
if(root!= null){
if(root.left!=null){
mid(root.left,res);
}
res.add(root.val);
if(root.right!=null){
mid(root.right,res);
}
}
}
}
JAVA代码(栈方法)
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>(); // 注意初始化写法
TreeNode curr = root;
while( curr!=null || !stack.isEmpty()){
while(curr!=null){
stack.push(curr);
curr = curr.left;
}
curr = stack.pop();
res.add(curr.val); //注意是.val
curr = curr.right;
}
return res;
}
}