前序遍历(递归)
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> list = new LinkedList();
preorder(root,list);
return list;
}
public void preorder (TreeNode root , List<Integer> list){
if(root == null) return;
list.add(root.val);
preorder(root.left,list);
preorder(root.right,list);
}
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> list = new LinkedList<>();
//利用栈来完成前序遍历
Stack<TreeNode> stack = new Stack<>();
//如果root为空就直接return list
if(root != null){
stack.push(root);
}
//保证遍历每一个元素
while(!stack.isEmpty()){
TreeNode pre = stack.pop();
list.add(pre.val);
//栈是先进后出 前序遍历是根左右的顺序 所以先放pre的右节点再放左节点 出栈顺序就可以为前序遍历
if(pre.right != null){
stack.push(pre.right);
}
if(pre.left != null){
stack.push(pre.left);
}
}
return list;
}
}