[LeetCode] 144. Binary Tree Preorder Traversal

二叉树的先序遍历。题意很简单,举个例子,如下图的这个二叉树,需要输出遍历node的结果是

Example:

Input: [1,null,2,3]
   1
    \
     2
    /
   3

Output: [1,2,3]

二叉树的遍历有多种方式,此题是要求用先序遍历。我自己总结的先序遍历的特点是中 - 左 - 右。即如果只有一个根节点和两个子节点的情形下(比如[1, 2, 3]),输出结果应该也是[1, 2, 3]。这题迭代和递归都需要掌握,其中迭代是用到了BFS的思想,层层遍历。遍历的时候会用到栈,所以放进栈的时候记得要逆向,先输出的node需要先被放进去。代码如下,

 1 /**
 2  * @param {TreeNode} root
 3  * @return {number[]}
 4  */
 5 var preorderTraversal = function(root) {
 6     // corner case
 7     if (!root) return [];
 8 
 9     // normal case
10     let result = [];
11     // let stack = [root];
12     let stack = [];
13     stack.push(root);
14     while (stack.length) {
15         var node = stack.pop();
16         result.push(node.val);
17         if (node.right) stack.push(node.right);
18         if (node.left) stack.push(node.left);
19     }
20     return result;
21 };

 

 1 /**
 2  * @param {TreeNode} root
 3  * @return {number[]}
 4  */
 5 var preorderTraversal = function(root) {
 6     let res = [];
 7     if (root === null) {
 8         return res;
 9     }
10     helper(res, root);
11     return res;
12 };
13 
14 var helper = function(res, root) {
15     if (root === null) return;
16     res.push(root.val);
17     helper(res, root.left);
18     helper(res, root.right);
19 };
上一篇:Python脚本无法通过TextMate运行,在IDLE和Eclipse中运行正常


下一篇:【leetcode】589. N-ary Tree Preorder Traversal