【leetcode 先序遍历】Binary Tree Preorder Traversal
来源:互联网 发布:手机淘宝换手机登录 编辑:程序博客网 时间:2024/04/28 20:13
1、题目
Given a binary tree, return the preorder traversal of its nodes' values.
For example:
Given binary tree {1,#,2,3}
,
1 \ 2 / 3
return [1,2,3]
.
2、分析
二叉树先序遍历(依序访问结点:根-左-右),递归方法的代码简洁,但是效率低于迭代方法,题目note也说了,Recursive solution 不值一提。
迭代法,可以建一个栈,用于存放那些未处理的结点,具体过程可以参考下图:
3、代码
#递归方法
<span style="font-size:18px;">/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:/*递归方法 性能远差于迭代方法*/ vector<int> preorderTraversal(TreeNode *root) { vector<int> result,left_vec,right_vec; if(!root) return result; //检查树是否为空 result.push_back(root->val); left_vec=preorderTraversal(root->left); //对左子树递归调用preorderTraversal() right_vec=preorderTraversal(root->right); //对右子树.. for(auto iter=left_vec.begin();iter!=left_vec.end();iter++) result.push_back(*iter); for(auto i=right_vec.begin();i!=right_vec.end();i++) result.push_back(*i); return result; }};</span>
#迭代方法
<span style="font-size:18px;">class Solution {public:/*迭代方法 栈*/ vector<int> preorderTraversal(TreeNode *root) { vector<int> result; //存放先序遍历结果 stack<TreeNode *> stk; //存放未处理的结点 TreeNode *p=root; if(p) stk.push(p); //如果树为空,stk初始为空,接下来的程序并未执行,返回的result为空 while(!stk.empty()) { p=stk.top(); stk.pop(); result.push_back(p->val); //取出栈顶元素,并将val保存进result if(p->right) stk.push(p->right); if(p->left) stk.push(p->left); //如果右左孩子不为空,则push进栈,必须先push右孩子再push左 } return result; }};</span>
0 0
- [leetcode] Binary Tree Preorder Traversal 非递归先序遍历
- 【leetcode 先序遍历】Binary Tree Preorder Traversal
- [C++]LeetCode: 95 Binary Tree Preorder Traversal (先序遍历)
- leetcode:Binary Tree Preorder Traversal 先序遍历
- Binary Tree Preorder Traversal -先序遍历
- 二叉树的先序遍历 Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal--二叉树的先序遍历
- binary-tree-preorder-traversal(先序遍历二叉树)
- 【leetcode】非递归先序遍历二叉树(Binary Tree Preorder Traversal)
- [LeetCode] Binary Tree Preorder Traversal (非递归的先序遍历)
- LeetCode 144 Binary Tree Preorder Traversal (先序遍历二叉树)
- Binary Tree Preorder Traversal 二叉树的先序@LeetCode
- leetcode---binary-tree-preorder-traversal---树前序遍历
- Binary Tree Preorder Traversal 二叉树的先序遍历,使用堆栈,非递归
- 144. Binary Tree Preorder Traversal (二叉树的先序遍历)
- 144. Binary Tree Preorder Traversal 【先序遍历 + 栈模拟递归】
- LeetCode Binary Tree Preorder Traversal
- 【LeetCode】Binary Tree Preorder Traversal
- 【MongoDB】在windows平台下mongodb的分片集群(六)
- 控制程序的启动数量(限制游戏多开)
- 乘方pow()的使用
- python 链表
- Caffe代码导读(2):LMDB简介
- 【leetcode 先序遍历】Binary Tree Preorder Traversal
- POJ 3690 Constellations hash
- WAV音频的播放(带窗口)
- HDU 2476 String painter 区间dp
- 怎样使网站文章快速收录
- BufferedImage与byte[]互转
- 我的uboot之路(3)start
- Codeforces 486B OR in Matrix(暴力)
- 选择对话框:自定义组合控件+自定义对话框 实现