1. 题目描述

给定一个二叉树,返回它的 前序 遍历。
示例:

  1. 输入: [1,null,2,3]
  2. 1
  3. \
  4. 2
  5. /
  6. 3

输出: [1,2,3]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?

2. 解题思路

初始化一个栈和结果数组,将根节点放入栈中,当栈不为空时,重复下面的步骤:
(1)取出栈顶元素top,访问top
(2)若top的右子节点不为空,将top的右子节点放入栈中
(3)若top的左子节点不为空,将top的左子节点放入栈中
(4)将取出的栈顶元素top放入结果数组

3. 代码实现

  1. /**
  2. * Definition for a binary tree node.
  3. * function TreeNode(val) {
  4. * this.val = val;
  5. * this.left = this.right = null;
  6. * }
  7. */
  8. /**
  9. * @param {TreeNode} root
  10. * @return {number[]}
  11. */
  12. var preorderTraversal = function(root) {
  13. if(!root){
  14. return [];
  15. }
  16. var result = []
  17. var stack = [root]
  18. while(stack.length!==0){
  19. var top = stack.pop();
  20. if(top.right){
  21. stack.push(top.right);
  22. }
  23. if(top.left){
  24. stack.push(top.left);
  25. }
  26. result.push(top.val);
  27. }
  28. return result;
  29. };

递归实现:

  1. /**
  2. * Definition for a binary tree node.
  3. * function TreeNode(val) {
  4. * this.val = val;
  5. * this.left = this.right = null;
  6. * }
  7. */
  8. /**
  9. * @param {TreeNode} root
  10. * @return {number[]}
  11. */
  12. var preorderTraversal = function(root) {
  13. var result = []
  14. var preorderTraversalNode = (node) => {
  15. if(node) {
  16. result.push(node.val)
  17. preorderTraversalNode(node.left)
  18. preorderTraversalNode(node.right)
  19. }
  20. }
  21. preorderTraversalNode(root)
  22. return result
  23. };

4. 提交结果

迭代实现:
144. 二叉树的前序遍历 - 图1
递归实现:
144. 二叉树的前序遍历 - 图2