//1.递归
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<>();
preorder_Traversal(root, list);
return list;
}
public void preorder_Traversal(TreeNode root,List<Integer> list) {
if (root == null) return;
list.add(root.val);
preorder_Traversal(root.left, list);
preorder_Traversal(root.right, list);
}
//2.1迭代
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>();
TreeNode node = root;
while(true) {
if (node != null) {
list.add(node.val);
stack.push(node.right);
node = node.left;
}else {
if (!stack.isEmpty()) {
node = stack.pop();
}else {
break;
}
}
}
return list;
}
//2.2迭代
//此种方法很像层序遍历,只要将stack换成queue,right和left顺序倒置,就成了层序遍历。
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>();
TreeNode node = root;
stack.push(node);
while(!stack.isEmpty()) {
node = stack.pop();
list.add(node.val);
if (node.right != null) {
stack.push(node.right);
}
if (node.left != null) {
stack.push(node.left);
}
}
return list;
}