[LeetCode]144 二叉树先序遍历
来源:互联网 发布:美国网络恐怖组织 编辑:程序博客网 时间:2024/05/19 17:52
Binary Tree Preorder Traversal(二叉树先序遍历)
【难度:Medium】
Given a binary tree, return the preorder traversal of its nodes’ values.
For example:
Given binary tree {1,#,2,3},
return [1,2,3].
Note: Recursive solution is trivial, could you do it iteratively?
使用迭代而不是递归的方法来先序遍历二叉树。
解题思路
对于递归的方法来先序遍历二叉树相信大家都不陌生,而本题要求使用迭代来遍历,就有点难度了。这里我们可以使用栈来记录中间经历的树节点,代码大体是使用while循环来替代递归方法。
c++代码如下:
//迭代方法/** * Definition for a binary tree node. * 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> v; stack<TreeNode*> s; TreeNode* cur = root; while (cur || !s.empty()) { if (cur) { //当前节点压栈 s.push(cur); //先序,先记录根节点的值 v.push_back(cur->val); //走左边 cur = cur->left; } else { //走右边 cur = s.top()->right; s.pop(); } } return v; }};
//递归方法/** * Definition for a binary tree node. * 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> v; if (!root) { return v; } v.push_back(root->val); vector<int> tmp = preorderTraversal(root->left); if (!tmp.empty()) { for (int i = 0; i < tmp.size(); i++) { v.push_back(tmp[i]); } } vector<int> tmp2 = preorderTraversal(root->right); if (!tmp2.empty()) { for (int i = 0; i < tmp2.size(); i++) { v.push_back(tmp2[i]); } } return v; }};
0 0
- [LeetCode]144 二叉树先序遍历
- [leetcode]二叉树先序遍历
- [leetcode]二叉树中序遍历
- leetcode二叉树遍历
- [leetcode]二叉树遍历
- 二叉树遍历LeetCode#144 #94 #145 (前中后序遍历)
- [LeetCode]94 二叉树中序遍历
- [LeetCode]145 二叉树后序遍历
- LeetCode之二叉树中序迭代遍历
- LeetCode Binary Tree Preorder Traversal (二叉树先序遍历非递归)
- Leetcode Binary Tree Preorder Traversal 二叉树先序遍历
- 144.leetcode Binary Tree Preorder Traversal(medium)[二叉树先序遍历]
- [leetcode-二叉树先序遍历]--144.Binary Tree Preorder Traversal
- [Leetcode] 二叉树的遍历(#94,#144,#145 )
- LeetCode 144 Binary Tree Preorder Traversal(二叉树前序遍历)
- leetcode 94|144|145. Binary Tree Traversal 二叉树三种遍历
- leetcode之二叉树类之二叉树遍历系列-----94/144/145/102/107/103
- 二叉树先序遍历(递归)
- Eclipse下安装Hibernate
- CentOS 6.7下Android SDK adb 命令报错的解决方法
- 4419: [Shoi2013]发微博 set
- 进程的终止
- ListView横向滑动
- [LeetCode]144 二叉树先序遍历
- js的事件流理解
- duilib Webkit内核dui化浏览器控件
- Oracle 安装报SGA size can not be greater than maximum shared memory segment size(0)以及内核参数讲解
- mackdown语法
- 为ListView每个Item上面的按钮添加事件
- leetcode:Sqrt(x) 【Java】
- Android图片加载与缓存开源框架:Android Glide
- 菜鸟的Android之旅(二)——Activity(一)