二叉树的中序遍历
1.题目
给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。
输入:root = [1,null,2,3]
输出:[1,3,2]
2.思路
既然是树的话,那么我们可以使用递归的方式。先向左边递归进行添加,然后添加中间,最后再递归添加右边。
3.使用递归方式实现代码
class TreeNode {
int val;
TreeNode left = null;
TreeNode right = null;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
public class MyTest{
public static List inorderTraversal(TreeNode root){
// 1.创建对应的集合
List<Integer> list = new ArrayList();
// 2.调用方法进行递归获取
inorder(root,list);
// 3.返回数组
return list;
}
public static static inorder(TreeNode root,List list){
// 如果当前节点为空,就直接返回
if(root == null){
return;
}
// 向左递归获取
inorder(root.left,list);
// 将当前值添加到集合中
list.add(root.val);
// 向右递归获取
inorder(root.right,list);
}
}
4.使用栈的方式实现代码
class TreeNode {
int val;
TreeNode left = null;
TreeNode right = null;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
public class MyTest{
public static List inorderTraversal(TreeNode root){
// 1.创建一个集合,一个栈
List<Integer> list = new ArrayList();
Stack<TreeNode> stack = new Stack();
// 2.进行循环,将数据放入集合中
// 只要节点不为null或栈不为空就一直循环
while(root != null || !stack.isEmpty()){
// 只要左边的节点不为空,就一直放到栈中
while(root != null){
stack.push(root);
root = root.left;
}
// 取出一个节点把值放入到集合中
root = stack.pop();
list.add(root.val);
// 然后查看右边的节点
root = root.right;
}
}
}