preorder Traversal

public class Solution{
	class TreeNode{
		int val;
		TreeNode left, right;
		public TreeNode(int val){
			this.val = val;
			this.left = null;
			this.right = null;
		}
	}



	/*
		father->left son->right son

	*/

		//recursion
	public List<Integer> preorderTraversal(TreeNode root){
		List<Integer> res = new ArrayList<>();
		traversal(res,root);
		return res;

	}

	public void traversal(List<Integer> res, TreeNode root){
		if (root == null) {
			return res;
		}

		res.add(root.val);
		traversal(res,root.left);
		traversal(res,root.right);

	}
	//non-recursion
	public List<Integer> preorderTraversal(TreeNode root){
		Stack<Integer> stack = new Stack<>();
		List<Integer> res = new ArrayList<>();
		if (root == null) {
			return res;
		}
		stack.push(root);

		while(!stack.isEmpty()){
			TreeNode node = stack.pop();
			res.add(node.val);
			
			//be careful, add right node before left node
			if (node.right != null) {
				stack.push(node.right);
			}
			if (node.left != null) {
				stack.push(node.left);
			}
		}

		return res;
	}
}

Last updated