题目描述
求给定的二叉树的前序遍历。
例如:
给定的二叉树为{1,#,2,3},
返回:[1,2,3].
备注;用递归来解这道题很简单,你可以给出迭代的解法么?
如果你不明白{1,#,2,3}的含义,点击查看相关信息
示例1
输入
{1,#,2,3}
输出
[1,2,3]
- 第一种经典的递归的方法不多做阐述
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类
* @return int整型ArrayList
*/
public ArrayList<Integer> preorderTraversal (TreeNode root) {
// write code here
ArrayList<Integer> arr = new ArrayList();
hlper(root,arr);
return arr;
}
public void hlper(TreeNode root,ArrayList<Integer> arr){
if(root == null) return;
arr.add(root.val);
hlper(root.left,arr);
hlper(root.right,arr);
}
}
- 第二种使用迭代的方式
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类
* @return int整型ArrayList
*/
public ArrayList<Integer> preorderTraversal (TreeNode root) {
// write code here
ArrayList<Integer> res = new ArrayList();
if(root == null) return res;
//利用栈模拟前序遍历 根 —— 左 —— 右
Stack<TreeNode> stack = new Stack<TreeNode>();
stack.push(root);
while(!stack.isEmpty()){
TreeNode node = stack.pop();
res.add(node.val);
if(node.right != null){
stack.push(node.right);
}
if(node.left != null){
stack.push(node.left);
}
}
return res;
}
}