Given a binary tree, return the preorder traversal of its nodes’ values.
Example:
Input: [1,null,2,3]1\2/3Output: [1,2,3]
Follow up: Recursive solution is trivial, could you do it iteratively?
题意
求树的前序遍历。
思路
递归或者迭代。
代码实现 - 递归
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> ans = new ArrayList<>();preOrder(root, ans);return ans;}private void preOrder(TreeNode x, List<Integer> ans) {if (x == null) {return;}ans.add(x.val);preOrder(x.left, ans);preOrder(x.right, ans);}}
代码实现 - 迭代
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> ans = new ArrayList<>();Deque<TreeNode> stack = new ArrayDeque<>();TreeNode cur = root;while (cur != null || !stack.isEmpty()) {if (cur != null) {ans.add(cur.val);stack.push(cur);cur = cur.left;} else {cur = stack.pop().right;}}return ans;}}
