力扣简144 二叉树的前序遍历++
树 前序遍历 递归调用 迭代(没写) 栈

package leetcode01; import java.util.LinkedList; import java.util.List; public class Solution144 { public static List<Integer> preorderTraversal(TreeNode root) { List<Integer> res=new LinkedList<Integer>(); res=preorder(root, res); return res; } public static List<Integer> preorder(TreeNode root,List<Integer> res) { if(root!=null) {//这里最开始写的while,导致在递归第一个root.left不断的把left的val值add进去,应该是if。 res.add(root.val); if(root.left!=null) { preorder(root.left,res); } if(root.right!=null) { preorder(root.right,res); } } return res; } public static void main(String[] args) { // TODO Auto-generated method stub TreeNode p=new TreeNode(12,new TreeNode(),new TreeNode(-60,null,null)); System.out.print(preorderTraversal(p)); } }
题解:递归 栈
栈的定义 :Deque<TreeNode> stack=new LinkedList<TreeNode>();
add=addLast push=addfirst 所以这里要用 每次新加的都在开头,才能后进先出
pop和poll没有觉得有啥差异 都是从first弹出
public static List<Integer> preorderTraversal(TreeNode root) { List<Integer> res=new LinkedList<Integer>(); if(root==null) { return res; } Deque<TreeNode> stack=new LinkedList<TreeNode>(); while(!stack.isEmpty()||root!=null) { while(root!=null) { stack.push(root); //add=addLast push=addfirst 所以这里要用 每次新加的都在开头,才能后进先出 res.add(root.val); root=root.left; } root=stack.pop();//pop和poll没有觉得有啥差异 都是从first弹出 root=root.right; } return res; }

浙公网安备 33010602011771号