递归
方法一:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class PreOrder1 {
public void preOrder(List<Integer> List,TreeNode root){
if(root == null){
return;
}else {
List.add(root.val);
preOrder(List,root.left);
preOrder(List,root.right);
}
}
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> List = new ArrayList<>();
if(root == null){
return List;
}
else {
preOrder(List,root);
}
return List;
}
}
方法二:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class PreOrder1 {
public List<Integer> ret = new ArrayList<>();
public List<Integer> preorderTraversal(TreeNode root) {
if(root == null){
return ret;
}
ret.add(root.val);
preorderTraversal(root.left);
preorderTraversal(root.right);
return ret;
}
}
前序遍历是先遍历根节点 在遍历左子树 最后遍历右子树
步骤如图所示:
跌代
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class PreOrder2 {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> List = new ArrayList<>();
if(root == null){
return List;
}
Stack<TreeNode> s = new Stack<>();
s.push(root);
while(!s.empty()){
TreeNode node = s.pop();
List.add(Integer.valueOf(node.val));
if(node.left != null){
s.push(node.left);
}
if(node.right != null){
s.push(node.right);
}
}
return List;
}
}
利用栈来完成遍历