给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
递归:
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> keys = new ArrayList<>();preorderTraversal(root, keys);return keys;}public void preorderTraversal(TreeNode root, List<Integer> keys){if(root == null){return;}//先遍历根节点keys.add(root.val);//遍历左子树preorderTraversal(root.left, keys);//遍历右子树preorderTraversal(root.right, keys);}}
迭代:
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> list = new ArrayList<>();Stack<TreeNode> stack = new Stack<>();stack.push(root);while(!stack.isEmpty()){TreeNode node = stack.pop();if(node == null){continue;}list.add(node.val);//前序 遍历,栈的话,需要push先右后左if(node.right!=null){stack.push(node.right);}if(node.left!=null){stack.push(node.left);}}return list;}}
