Binary Tree Preorder Traversal @leetcode
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相关推荐
- [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 ...
- Binary Tree Preorder Traversal LeetCode OJ
2019独角兽企业重金招聘Python工程师标准>>> # Definition for a binary tree node. # class TreeNode(object): ...
- 【二叉树迭代版前序遍历】LeetCode 144. Binary Tree Preorder Traversal
LeetCode 144. Binary Tree Preorder Traversal Solution1:递归版 二叉树的前序遍历递归版是很简单的,前序遍历的迭代版相对是最容易理解的. 迭代版链接 ...
- 14 二叉树的前序遍历(Binary Tree Preorder Traversal)
文章目录 1 题目 2 描述 3 解决方案 3.1 递归算法 3.1.1 遍历法(Traverse) 思路 源码 3.1.2 分治法(Devide And Conquer) 思路 源码 3.2 非递归 ...
- [LeetCode 题解]: Binary Tree Preorder Traversal
前言 [LeetCode 题解]系列传送门: http://www.cnblogs.com/double-win/category/573499.html 1.题目描述 Given a binary ...
- [leetcode] Binary Tree Preorder Traversal
Given a binary tree, return the preorder traversal of its nodes' values. For example: Given binary t ...
- leetcode 144. Binary Tree Preorder Traversal
Given a binary tree, return the preorder traversal of its nodes' values. For example: Given binary t ...
- Leetcode - 144. Binary Tree Preorder Traversal (层次遍历)
Given a binary tree, return the preorder traversal of its nodes' values. Example: Input: [1,null,2,3 ...
- leetcode 144. Binary Tree Preorder Traversal ----- java
Given a binary tree, return the preorder traversal of its nodes' values. For example: Given binary t ...
最新文章
- ECCV 2020 | 史上最强二值化网络ReActNet,精度首超ResNet
- MongoDB安装启动教程
- 这所985大学决定:404名硕博研究生,退学处理!
- 下载丨8月数据库技术通讯:不合理业务设计导致CPU飙升
- window两个窗口上下摆放_滑动窗口技巧
- java.lang.NullPointerException: Project directory not specified
- ABP应用层——参数有效性验证
- 万字详解自动驾驶定位技术
- c语言延时函数delay延时一秒_使用树莓派拍摄延时动画,制作GIF图
- 老实人spring源码解析目录
- 真核有参转录组测序标准分析-3
- Linux之进程管理——查看进程
- 笔记本计算机无法上无线网络,笔记本连不上无线网络如何解决?
- 分析在各大考纲词汇中既没有词根也没有前缀和后缀的独立单词
- 不适合学习编程的人是你吗?
- 一个程序员近20年工资单
- hello.i 预处理文件
- 设计模式在美团外卖营销业务中的实践
- Jhipster 中的 Liquibase 正确使用方法
- 计算机专业难不难,计算机专业考研难不难
热门文章
- 动手学pytorch之通俗易懂何为卷积-深度AI科普团队
- Bezier(贝塞尔)曲线(五阶)的轨迹规划在自动驾驶中的应用(六)
- Windows 安装 Redis
- MySQL日志的类型和实现方法_mysql的日志类型及作用
- 待支付取件费用是什么意思_1元保管费与直接取件,你赞赏丰巢快递柜了吗?...
- 信安精品课:第2章网络攻击原理与常用方法精讲笔记
- python高级应用程序课程设计_Python高级应用程序设计任务
- python sub 第三次_Python学习的第三次的总结
- springboot+mybatis实现动态切换数据源
- navicat修改表的主键自增长报错