二叉树的前序遍历
前序遍历:中-左-右
树节点类
class TreeNode {
public int val;
public TreeNode left, right;
public TreeNode(int val) {
this.val = val;
this.left = this.right = null;
}
}
递归方式
public ArrayList<Integer> preorderTraversal(TreeNode root) {
// write your code here
ArrayList<Integer> arr = new ArrayList<Integer>();
inorder(arr,root);
return arr;
}
public ArrayList<Integer> inorder(ArrayList<Integer> arr, TreeNode root)
{
if(root == null)
return arr;
if(root!=null)
{
arr.add(root.val);
if(root.left!=null)
{
arr = inorder(arr, root.left);
}
if(root.right!=null)
{
arr = inorder(arr, root.right);
}
}
return arr;
}
非递归方式
public ArrayList<Integer> preorderTraversal(TreeNode root) {
ArrayList<Integer> arr = new ArrayList<Integer>();
ArrayList<TreeNode> p =new ArrayList<TreeNode>();
if(root==null)
{
return arr;
}
while(root!=null || p.size()!=0)
{
arr.add(root.val);
if(root.right!=null)
{
p.add(root.right);
}
root = root.left;
if(root==null&&p.size()!=0)
{
root = p.get(p.size()-1);
p.remove(p.size()-1);
}
}
return arr;
}