[LeetCode]144. Binary Tree Preorder Traversal--二叉树前序遍历
来源:互联网 发布:微信菜单事件推送 php 编辑:程序博客网 时间:2024/05/21 08:43
> [144. Binary Tree Preorder Traversal](https://leetcode.com/problems/binary-tree-preorder-traversal/description/)
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].Note: Recursive solution is trivial, could you do it iteratively?
分析:二叉树的基础知识
实现三种遍历方法:
1.递归,时间复杂度:O(n),空间复杂度:O(n)
2.迭代,时间复杂度:O(n),空间复杂度:O(n)
3.线索二叉树,时间复杂度:O(n),空间复杂度:O(1)
// 解法一:递归/** * 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> result; preTraversal(root, result); return result; } void preTraversal(TreeNode* root, vector<int>& result){ if(!root) return; result.push_back(root->val); preTraversal(root->left, result); preTraversal(root->right, result); }};
// 解法二:迭代/** * 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> result; if(!root) return result; stack<TreeNode*> s; TreeNode* temp = root; while(temp || !s.empty()){ if(temp){ result.push_back(temp->val); if(temp->right) s.push(temp->right); temp = temp->left; }else{ temp = s.top(); s.pop(); } } return result; }};
// 解法三:线索二叉树/** * 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; TreeNode* temp = root, *prev; while(temp){ if(!temp->left){ v.push_back(temp->val); temp = temp->right; }else{ prev = temp->left; while(prev->right&&(prev->right != temp)) prev = prev->right; if(!prev->right){ v.push_back(temp->val); prev->right = temp; temp = temp->left; }else{ prev->right = NULL; temp = temp->right; } } } return v; }};
阅读全文
0 0
- [LeetCode]144. Binary Tree Preorder Traversal--二叉树前序遍历
- leetcode 144. Binary Tree Preorder Traversal 二叉树前序遍历 + DFS
- 144.leetcode Binary Tree Preorder Traversal(medium)[二叉树先序遍历]
- [leetcode-二叉树先序遍历]--144.Binary Tree Preorder Traversal
- Leetcode: Binary Tree Preorder Traversal(二叉树前序遍历)
- LeetCode 144 Binary Tree Preorder Traversal(二叉树前序遍历)
- leetcode---binary-tree-preorder-traversal---树前序遍历
- LeetCode Binary Tree Preorder Traversal (二叉树先序遍历非递归)
- Leetcode Binary Tree Preorder Traversal 二叉树先序遍历
- 【二叉树先序遍历】Binary Tree Preorder Traversal
- 144.Binary Tree Preorder Traversal(二叉树先序遍历)
- 二叉树遍历144. Binary Tree Preorder Traversal
- 二叉树先序遍历——144. Binary Tree Preorder Traversal
- 二叉树前序遍历Binary Tree Preorder Traversal (Java)
- 【LeetCode】144. Binary Tree Preorder Traversal 二叉树先序遍历的非递归实现
- LeetCode 144. Binary Tree Preorder Traversal (二叉树先根序遍历,非递归)
- LeetCode 144. Binary Tree Preorder Traversal(二叉树前缀遍历)
- 【LeetCode】Binary Tree Preorder Traversal 二叉树前序遍历递归以及非递归算法
- Heavy Transportation dijkstra(附vector模拟邻接表)
- 物化视图 Materialized View
- java面向对象四大特征
- Xshell连接Linux心得体会
- 欢迎使用CSDN-markdown编辑器
- [LeetCode]144. Binary Tree Preorder Traversal--二叉树前序遍历
- 通过lwip2.0.2 PPP协议与GPRS模块实现网络通讯
- JS的not defined和undefined的差别
- jsp的内置对象
- Javascript 用cssText设置样式
- 微软Visual Studio 2017—让好东西再爱你一遍!!
- C小加 之 随机数
- Bottom Sheet使用教程
- 实现参数传递的几种方式