leetcode-144. 二叉树的前序遍历
递归
// 前序遍历
public class PreorderTraversal {
List<Integer> result = new ArrayList<Integer>();
public List<Integer> preorderTraversal(TreeNode root) {
if(root == null) {
return result;
}
result.add(root.val);
preorderTraversal(root.left);
preorderTraversal(root.right);
return result;
}
}
迭代
运用迭代能方便理解遍历树的整体逻辑,能够更好的理解递归在机器中怎么用栈实现的。除此之外,当使用遍历作为迭代器的构造器的时候,基本是运用迭代的写法去构建,所以要善于掌握迭代的写法。
// 前序遍历
public class PreorderTraversal {
List<Integer> result = new ArrayList<Integer>();
public List<Integer> preorderTraversalInterator(TreeNode root) {
Stack<TreeNode> stack = new Stack<TreeNode>();
while(root != null || !stack.empty()) {
while(root!=null) {
System.out.println(root.val);
res.add(root.val);
stack.push(root);
root = root.left;
}
TreeNode node = stack.pop();
if(node.right != null) {
root = node.right;
}
}
return res;
}
}
leetcode-