1. 题目描述
给定一个二叉树,返回它的 前序 遍历。
示例:
输入: [1,null,2,3]1\2/3
输出: [1,2,3]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
2. 解题思路
初始化一个栈和结果数组,将根节点放入栈中,当栈不为空时,重复下面的步骤:
(1)取出栈顶元素top,访问top
(2)若top的右子节点不为空,将top的右子节点放入栈中
(3)若top的左子节点不为空,将top的左子节点放入栈中
(4)将取出的栈顶元素top放入结果数组
3. 代码实现
/*** Definition for a binary tree node.* function TreeNode(val) {* this.val = val;* this.left = this.right = null;* }*//*** @param {TreeNode} root* @return {number[]}*/var preorderTraversal = function(root) {if(!root){return [];}var result = []var stack = [root]while(stack.length!==0){var top = stack.pop();if(top.right){stack.push(top.right);}if(top.left){stack.push(top.left);}result.push(top.val);}return result;};
递归实现:
/*** Definition for a binary tree node.* function TreeNode(val) {* this.val = val;* this.left = this.right = null;* }*//*** @param {TreeNode} root* @return {number[]}*/var preorderTraversal = function(root) {var result = []var preorderTraversalNode = (node) => {if(node) {result.push(node.val)preorderTraversalNode(node.left)preorderTraversalNode(node.right)}}preorderTraversalNode(root)return result};
4. 提交结果
迭代实现:
递归实现:
