给出一棵二叉树,返回这棵树的中序遍历
//递归,o(n)t(n)
解题思路:
1.根节点不空时,
2.左子树不空,遍历左子树
3.根节点值加入到结果中
4.右子树不空,遍历右子树
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类
* @return int整型ArrayList
*/
public ArrayList<Integer> inorderTraversal (TreeNode root) {
ArrayList<Integer>list=new ArrayList<>();
helper(root,list);
return list;
}
public void helper (TreeNode root,ArrayList<Integer> list){
if(root!=null){
if(root.left!=null){
helper(root.left,list);
}
list.add(root.val);
if(root.right!=null){
helper(root.right,list);
}
}
}
}
栈
1.定义栈结构
2.当栈不空或者是遍历节点不为空时,循环
3.当遍历节点不空时,找到左节点,将其依次入栈,
4.弹栈(最左节点),将其节点值记录在list中
5.访问当前节点右节点
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类
* @return int整型ArrayList
*/
public ArrayList<Integer> inorderTraversal (TreeNode root) {
ArrayList<Integer>list=new ArrayList<>();
Stack<TreeNode> stack=new Stack<>();
TreeNode cur=root;
while(cur!=null||!stack.isEmpty()){
while(cur!=null){
stack.push(cur);
cur=cur.left;
}
//弹出的是最左下节点
cur=stack.pop();
list.add(cur.val);
cur=cur.right;
}
return list;
}
}