Binary Tree Preorder Traversal

//stack 
class Solution {
		public List<Integer> preorderTraversal(TreeNode root) {
				List<Integer> result = new ArrayList<>();
				LinkedList<TreeNode> stack = new LinkedList<>();
				
				if (root == null) return result;
				stack.push(root);
				while (!stack.isEmpty()) {
					TreeNode node = stack.pop();
					result.add(node.val);        //add result before children 
					if (node.right != null) {
						stack.push(node.right);
					}
					if (node.left != null) {
						stack.push(node.left); //后加进去,希望它先出来
					}
				}
				return result;
		}
}

//recursion 
class Solution {
		public List<Integer> preorderTraversal(TreeNode root) {
			
			List<Integer> result = new ArrayList<>();
		if (root == null) return result;
		
			result.add(root.val);
			List<Integer> left = preorderTraversal(root.left);
			List<Integer> right = preorderTraversal(root.right);
			
			result.addAll(left);
			result.addAll(right);
			return result;
		}
}


//use helper function 
class Solution {
		public List<Integer> preorderTraversal(TreeNode root) {
			List<Integer> result = new ArrayList<>();
			if (root == null) return result;
			
			helper(root, result);
			return result;
		}
		
		private void helper(TreeNode root, List<Integer> result) {
			if (root == null) return; //base case 
			
			result.add(root.val);
			helper(root.left, result);
			helper(root.right, result);
		}
}

最后更新于

这有帮助吗?