题意:二叉树的前序遍历
这里先提供递归实现,后续补上
public ArrayList<Integer> preorderTraversal(TreeNode root) {
if(root == null) return new ArrayList<Integer>();
ArrayList<Integer> list = new ArrayList<Integer>();
ArrayList<Integer> leftList = preorderTraversal(root.left);
ArrayList<Integer> rightList = preorderTraversal(root.right);
list.add(root.val);
if(leftList.size() > 0) list.addAll(leftList);
if(rightList.size() > 0) list.addAll(rightList);
return list;
}
二叉树的先序遍历,非递归:用stack存储根节点,若stack不为空,则一次将右子节点和左子节点放入stack中,这样每次pop的时候就能达到先遍历左子树再遍历右子树
public ArrayList<Integer> preorderTraversal(TreeNode root) {
Stack<TreeNode> s = new Stack<TreeNode>();
ArrayList<Integer> list = new ArrayList<Integer>();
if(root == null) return list;
s.push(root);
while(!s.isEmpty()){
TreeNode t = s.pop();
list.add(t.val);
if(t.right != null)
s.push(t.right);
if(t.left != null)
s.push(t.left);
}
return list;
}