一、迭代遍历
1.遍历顺序为:左子树——根节点——右子树
2.创建Stack栈进行辅助计算\将根节点入栈、
3.结束条件为栈为空并且当前节点为空
4.循环入栈左子节点当前节点为空,
5.集合存储出栈元素、
6.将当前节点设置为右节点
/**
* 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) {
ArrayList<Integer> ans = new ArrayList<>();
if(root==null){
return ans;
}
Stack<TreeNode> stack= new Stack<>();
stack.push(root);
TreeNode t=stack.pop();
while(t!=null||!stack.isEmpty()){
while(t!=null){
stack.push(t);
t=t.left;
}
TreeNode arrt=stack.pop();
ans.add(arrt.val);
t=arrt.right;
}
return ans;
}
}
二、递归解法:
1.分解递归:左递归、根节点直接加入list、右递归
/**
* 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) {
ArrayList<Integer> ans = new ArrayList<>();
f(root,ans);
return ans;
}
public void f(TreeNode root,ArrayList<Integer> ans) {
if(root==null){
return;
}
f(root.left,ans);//左递归
ans.add(root.val);//根加入
f(root.right,ans);//右递归
}
}