【LeetCode】144. Binary Tree Preorder Traversal
来源:互联网 发布:php网站代码大全 编辑:程序博客网 时间:2024/06/16 11:12
Difficulty: Medium
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?
解法一:使用递归求解,判断当前根节点是否为空,先遍历当前子树的根节点,然后递归遍历当前节点的左子树,然后递归遍历当前节点的右子树。
/** * 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) { if(root) { v.push_back(root->val); preorderTraversal(root->left); preorderTraversal(root->right); } return v; } private: vector<int> v;};
一开始,我没有多想,一下子就把if那个条件判断写成了while,然后就TLE了,所以做题还是要想清楚每一步是怎么样的,不要想当然。
解法二:使用非递归的做法,先判断根节点是否为空,然后进行模拟先序访问,如果左子树非空,并且之前没有访问过,就访问左子树,然后访问右子树,也同样是要判断之前有没有访问过,每次访问将节点入栈,如果左子树和右子树都空,或者都访问过了,那么出栈。栈为空时访问结束。
class Solution {public: vector<int> preorderTraversal(TreeNode* root) { vector<int> v; if(root==NULL) return v; else{ stack<TreeNode*> proc; proc.push(root); v.push_back(root->val); map<TreeNode*,int> visit; visit[root]=1; while(!proc.empty()) { TreeNode* node = proc.top(); if(node->left!=NULL && visit[node->left]!=1) { node=node->left; visit[node]=1; v.push_back(node->val); proc.push(node); } else if(node->right!=NULL && visit[node->right]!=1) { node=node->right; visit[node]=1; v.push_back(node->val); proc.push(node); } else{ proc.pop(); } } } return v; } };
0 0
- [LeetCode]144.Binary Tree Preorder Traversal
- LeetCode 144. Binary Tree Preorder Traversal
- [leetcode] 144.Binary Tree Preorder Traversal
- 【LeetCode】144. Binary Tree Preorder Traversal
- 144. Binary Tree Preorder Traversal LeetCode
- LeetCode 144. Binary Tree Preorder Traversal
- [LeetCode]144. Binary Tree Preorder Traversal
- 【LeetCode】144. Binary Tree Preorder Traversal
- leetcode:144. Binary Tree Preorder Traversal
- leetcode 144. Binary Tree Preorder Traversal
- [LeetCode OJ]144.Binary Tree Preorder Traversal
- LeetCode *** 144. Binary Tree Preorder Traversal
- LeetCode 144. Binary Tree Preorder Traversal
- LeetCode-144.Binary Tree Preorder Traversal
- LeetCode 144. Binary Tree Preorder Traversal
- leetcode 144. Binary Tree Preorder Traversal
- leetcode 144. Binary Tree Preorder Traversal
- [leetcode] 144. Binary Tree Preorder Traversal
- 一位资深程序员大牛给予Java初学者的学习路线建议
- Touch ID使用
- JS数组
- 遍历ResultSet结果集
- 九月六日JSP整理
- 【LeetCode】144. Binary Tree Preorder Traversal
- MySQL使用教程(六)
- android studio 上传项目到github上
- 推荐系统的常见方法总结
- LeetCode 121. Best Time to Buy and Sell Stock(dynamic programming)
- Bootstrap-Grip
- Android逆向实例笔记—手游中的内购破解(火柴人联盟最新版1.9.2 BB弹 )
- Linux进程间通信——使用共享内存
- 表单