给出一棵二叉树,返回这棵树的中序遍历
//递归,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;
}
}
本文介绍了如何利用栈来实现二叉树的中序遍历。首先通过递归方式解释了中序遍历的基本步骤,即当根节点不空时,先遍历左子树,然后将根节点值加入结果,最后遍历右子树。接着详细说明了栈结构的实现过程,包括定义栈、当遍历节点或栈不空时进行循环,将左节点入栈,弹栈记录节点值,以及访问当前节点的右节点。
1250

被折叠的 条评论
为什么被折叠?



