http://oj.leetcode.com/problems/binary-tree-preorder-traversal/

!看题上来就递归

 1 /**
 2  * Definition for binary tree
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 class Solution {
11 public:
12     vector<int> preorderTraversal(TreeNode *root) {
13         // IMPORTANT: Please reset any member data you declared, as
14         // the same Solution instance will be reused for each test case.
15         vector<int> res;
16         preorderTraversalSmall(root,res);
17         return res;
18     }
19
20     void preorderTraversalSmall(TreeNode *root,vector<int> &res) {
21         // IMPORTANT: Please reset any member data you declared, as
22         // the same Solution instance will be reused for each test case.
23         if(root == NULL)
24         {
25             return ;
26         }
27         res.push_back(root->val);
28         preorderTraversalSmall(root->left,res);
29         preorderTraversalSmall(root->right,res);
30     }
31 };

#然后仔细推敲了题目中这句话:Note: Recursive solution is trivial, could you do it iteratively?

我之前的世界观是:Recursive的意思是循环或者递归,iterative的意思是迭代。我一下就蒙圈了,既然我认为Recursive又是循环又是递归,那计算机界总不能两个思想用一个词吧?而天天挂在嘴上的迭代又TM在这里表示什么?查了一下有道,recursive的确表示循环和递归,但是有个[数]的标记。然后维基:

recursion -- http://en.wikipedia.org/wiki/Recursion

iteration -- http://en.wikipedia.org/wiki/Iteration

在计算机科学中,迭代是程序中对一组指令(或一定步骤)的重复。它既可以被用作通用的术语(与“重复”同义),也可以用来描述一种特定形式的具有可变状态的重复。
递归(英语:Recursion),又译为递回,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。

虽然“一组指令的重复”,这句话区分不开递归和循环,但是我知道了recursion一词,在计算机领域,就翻译成“递归”。我人生观的bug,再一次得到了修复。

!在明白的题意后(虽然已经AC了&&采用了本题不推荐的方式),开始考虑如何用迭代的方式来做。想到栈这个神奇的东西,就迎刃而解了。

 1 /**
 2  * Definition for binary tree
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 class Solution {
11 public:
12     vector<int> preorderTraversal(TreeNode *root) {
13         // IMPORTANT: Please reset any member data you declared, as
14         // the same Solution instance will be reused for each test case.
15         vector<int> res;
16         stack<TreeNode*> tmp;
17         TreeNode*top = root;
18         while(top)
19         {
20             res.push_back(top->val);
21             if(top->right)
22                 tmp.push(top->right);
23             if(top->left)
24             {
25                 top = top->left;
26             }
27             else if(tmp.size()>0)
28             {
29                 top = tmp.top();
30                 tmp.pop();
31             }
32             else
33             {
34                 break;
35             }
36         }
37         return res;
38     }
39 };

转载于:https://www.cnblogs.com/rogarlee/p/3425499.html

Binary Tree Preorder Traversal @leetcode相关推荐

  1. [Lintcode]66. Binary Tree Preorder Traversal/[Leetcode]144. Binary Tree Preorder Traversal

    66. Binary Tree Preorder Traversal/144. Binary Tree Preorder Traversal 本题难度: Easy/Medium Topic: Bina ...

  2. Binary Tree Preorder Traversal LeetCode OJ

    2019独角兽企业重金招聘Python工程师标准>>> # Definition for a binary tree node. # class TreeNode(object): ...

  3. 【二叉树迭代版前序遍历】LeetCode 144. Binary Tree Preorder Traversal

    LeetCode 144. Binary Tree Preorder Traversal Solution1:递归版 二叉树的前序遍历递归版是很简单的,前序遍历的迭代版相对是最容易理解的. 迭代版链接 ...

  4. 14 二叉树的前序遍历(Binary Tree Preorder Traversal)

    文章目录 1 题目 2 描述 3 解决方案 3.1 递归算法 3.1.1 遍历法(Traverse) 思路 源码 3.1.2 分治法(Devide And Conquer) 思路 源码 3.2 非递归 ...

  5. [LeetCode 题解]: Binary Tree Preorder Traversal

    前言 [LeetCode 题解]系列传送门:  http://www.cnblogs.com/double-win/category/573499.html 1.题目描述 Given a binary ...

  6. [leetcode] Binary Tree Preorder Traversal

    Given a binary tree, return the preorder traversal of its nodes' values. For example: Given binary t ...

  7. leetcode 144. Binary Tree Preorder Traversal

    Given a binary tree, return the preorder traversal of its nodes' values. For example: Given binary t ...

  8. Leetcode - 144. Binary Tree Preorder Traversal (层次遍历)

    Given a binary tree, return the preorder traversal of its nodes' values. Example: Input: [1,null,2,3 ...

  9. leetcode 144. Binary Tree Preorder Traversal ----- java

    Given a binary tree, return the preorder traversal of its nodes' values. For example: Given binary t ...

最新文章

  1. ECCV 2020 | 史上最强二值化网络ReActNet,精度首超ResNet
  2. MongoDB安装启动教程
  3. 这所985大学决定:404名硕博研究生,退学处理!
  4. 下载丨8月数据库技术通讯:不合理业务设计导致CPU飙升
  5. window两个窗口上下摆放_滑动窗口技巧
  6. java.lang.NullPointerException: Project directory not specified
  7. ABP应用层——参数有效性验证
  8. 万字详解自动驾驶定位技术
  9. c语言延时函数delay延时一秒_使用树莓派拍摄延时动画,制作GIF图
  10. 老实人spring源码解析目录
  11. 真核有参转录组测序标准分析-3
  12. Linux之进程管理——查看进程
  13. 笔记本计算机无法上无线网络,笔记本连不上无线网络如何解决?
  14. 分析在各大考纲词汇中既没有词根也没有前缀和后缀的独立单词
  15. 不适合学习编程的人是你吗?
  16. 一个程序员近20年工资单
  17. hello.i 预处理文件
  18. 设计模式在美团外卖营销业务中的实践
  19. Jhipster 中的 Liquibase 正确使用方法
  20. 计算机专业难不难,计算机专业考研难不难

热门文章

  1. 动手学pytorch之通俗易懂何为卷积-深度AI科普团队
  2. Bezier(贝塞尔)曲线(五阶)的轨迹规划在自动驾驶中的应用(六)
  3. Windows 安装 Redis
  4. MySQL日志的类型和实现方法_mysql的日志类型及作用
  5. 待支付取件费用是什么意思_1元保管费与直接取件,你赞赏丰巢快递柜了吗?...
  6. 信安精品课:第2章网络攻击原理与常用方法精讲笔记
  7. python高级应用程序课程设计_Python高级应用程序设计任务
  8. python sub 第三次_Python学习的第三次的总结
  9. springboot+mybatis实现动态切换数据源
  10. navicat修改表的主键自增长报错