Leetcode144. 二叉树的前序遍历
递归:
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<>();
if (root == null) {
return result;
}
// 借助栈完成二叉树的前序遍历
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while (!stack.isEmpty()) {
// 弹出栈中的第一个元素
TreeNode currentNode = stack.pop();
result.add(currentNode.val);
// 需要先将右子节点入栈
if (currentNode.right != null) {
stack.push(currentNode.right);
}
// 将左子节点入栈
if (currentNode.left != null) {
stack.push(currentNode.left);
}
}
return result;
}
}
非递归:
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> resultDataList = new ArrayList<>();
preOrder(root, resultDataList);
return resultDataList;
}
public void preOrder(TreeNode root, List<Integer> result) {
if (root == null) {
return;
}
result.add(root.val);
preOrder(root.left, result);
preOrder(root.right, result);
}
}