中序遍历,使用递归和迭代两种方法
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class Solution {
public static void main(String[] args) {
// TODO 自动生成的方法存根
}
//中序遍历
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<>();
inorder(root, list);
return list;
}
//递归
public void inorder(TreeNode node,List<Integer> list){
if (node == null) {//判断递归结束条件
return;
}
if (node.left != null) {
inorder(node.left, list);
}
list.add(node.val);
if(node.right != null)
{
inorder(node.right, list);
}
}
//迭代
public void setList(TreeNode root,ArrayList<Integer> res)
{
Stack<TreeNode> tree=new Stack<TreeNode>();
tree.add(root);
while(!tree.isEmpty())
{
TreeNode curNode=tree.lastElement();//取得stack最上面的值,但是不删除
if(curNode.left!=null)
{
tree.add(curNode.left);
curNode.left=null;//做标记,等下次弹出时,就不会再去遍历左边,否则会死循环
continue;
}
else
{
res.add(curNode.val);
tree.pop();
}
if(curNode.right!=null)
{
tree.add(curNode.right);
}
}
}
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}