1.经典递归法
2.迭代法
根据中序遍历的定义进行模拟就好了~
Accode:
1递归:
/**
* Definition for a binary tree node.
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
*/
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<>();
dfs(root,list);
return list;
}
private void dfs(TreeNode root, List<Integer> list) {
if(root==null)return;
dfs(root.left,list);
list.add(root.val);
dfs(root.right,list);
}
}
2:迭代法
/**
* Definition for a binary tree node.
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
*/
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<Integer>();
Deque<TreeNode> st = new LinkedList<TreeNode>();
while (root!=null||!st.isEmpty()){
while (root!=null){//按照中序遍历的规则,先一直左
st.push(root);
root=root.left;
}
root=st.pop();//到底,拿出栈顶
list.add(root.val);
root=root.right;
}
return list;
}
}
over~