Binary Tree Preorder Traversal
Description
Given a binary tree, return the preorder traversal of its nodes’ values.
法1:递归:
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
* @param root: A Tree
* @return: Preorder in ArrayList which contains node values.
*/
public List<Integer> preorderTraversal(TreeNode root) {
// write your code here
ArrayList<Integer> results = new ArrayList<>() ;
if (root == null){
return results ;
}
List<Integer> left = preorderTraversal(root.left);
List<Integer> right = preorderTraversal(root.right);
results.add(root.val) ;
results.addAll(left) ;
results.addAll(right);
return results ;
}
}
法2:非递归:
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
* @param root: A Tree
* @return: Preorder in ArrayList which contains node values.
*/
public List<Integer> preorderTraversal(TreeNode root) {
// write your code here
Stack<TreeNode> stack = new Stack<TreeNode>();
ArrayList<Integer> results = new ArrayList<Integer>();
if(root == null){
return results ;
}
stack.push(root);
while(!stack.isEmpty()){
TreeNode node = stack.pop();
results.add(node.val);
if(node.right != null){
stack.push(node.right) ;
}
if(node.left != null){
stack.push(node.left);
}
}
return results ;
}
}