144. 二叉樹的前序遍歷
難度:簡單
題目
給你二叉樹的根節點 root
,返回它節點值的 前序 遍歷。
示例 1:
輸入:root = [1,null,2,3]
輸出:[1,2,3]
示例 2:
輸入:root = []
輸出:[]
示例 3:
輸入:root = [1]
輸出:[1]
示例 4:
輸入:root = [1,2]
輸出:[1,2]
示例 5:
輸入:root = [1,null,2]
輸出:[1,2]
提示:
- 樹中節點數目在范圍
[0, 100]
內 -100 <= Node.val <= 100
**進階:**遞歸算法很簡單,你可以通過迭代算法完成嗎?
個人題解
方法一:遞歸
遞歸,最簡單的前中后序遍歷方式
/*** 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> result = new ArrayList<>();process(result, root);return result;}private void process(List<Integer> result, TreeNode node) {if (node == null) {return;}result.add(node.val);process(result, node.left);process(result, node.right);}
}
方法二:迭代
/*** 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> result = new ArrayList<>();if (root == null) {return result;}Deque<TreeNode> stack = new LinkedList<>();stack.push(root);while (!stack.isEmpty()) {TreeNode cur = stack.pop();result.add(cur.val);if (cur.right != null) {stack.push(cur.right);}if (cur.left != null) {stack.push(cur.left);}}return result;}
}