题目描述:
思路:递归,经典的二叉树的前序遍历。
import java.util.LinkedList;
import java.util.List;
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
LinkedList<Integer> list=new LinkedList<>();
preorder(root,list);
return list;
}
public void preorder(TreeNode root,List<Integer> list){
if (root!=null){
list.add(root.val);
if (root.left!=null){
preorder(root.left,list);
}
if (root.right!=null){
preorder(root.right,list);
}
}
}
}
不用递归用迭代方法,需要注意的是和中序遍历不同的是只有右节点需要放入栈中
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
LinkedList<Integer> list=new LinkedList<>();
Deque<TreeNode> deque=new LinkedList<>();
TreeNode cur=root;
while (cur!=null||!deque.isEmpty()){
list.add(cur.val);
if (cur.right!=null) deque.push(cur.right);
if (cur.left!=null) cur=cur.left;
else {
if (!deque.isEmpty()) cur=deque.pop();
else break;
}
}
return list;
}
}