leetcode 257. Binary Tree Paths
来源:互联网 发布:linux查找文件夹 编辑:程序博客网 时间:2024/05/17 05:55
/*leetcode 257. Binary Tree PathsGiven a binary tree, return all root-to-leaf paths.For example, given the following binary tree: 1/ \2 3\ 5All root-to-leaf paths are:["1->2->5", "1->3"]题目大意:求解二叉树中所有根节点到叶子节点的路径解题思路:*/#include "TreeInclude.h"#include <unordered_set>#include <stack>class Solution{public: //iterator vector<string> binaryTreePaths(TreeNode* root) { vector<string> ret; if (!root) return ret; //存放路径的栈 stack<TreeNode*> stk; stk.push(root); //存放路径的数 vector<int> pathVal({root->val}); //是否已经遍历过了 unordered_set<TreeNode*> umap; umap.insert(root); TreeNode* cur; while (stk.size()) { cur = stk.top(); //如果左右子树都为空则: //找到一条路径,压入返回数组中;继续回溯 if (!cur->left && !cur->right) { ret.push_back(GenHelper(pathVal)); pathVal.pop_back(); stk.pop(); } else { if (cur->left) { auto isLeft = umap.find(cur->left); if (isLeft == umap.end())//没有访问过 { //开始访问:把值存放在值得数组中,把节点放到栈中,并标记为已访问 pathVal.push_back(cur->left->val); stk.push(cur->left); umap.insert(cur->left); continue; } } //能够到这里:说明左子树为空或者左子树已经访问过了 //因为我们要每次访问一条路径,因此不能把两条路径混杂了。 if (cur->right) { auto isRight = umap.find(cur->right); if (isRight == umap.end())//没有访问过 { //开始访问:把值存放在值得数组中,把节点放到栈中,并标记为已访问 pathVal.push_back(cur->right->val); stk.push(cur->right); umap.insert(cur->right); continue; } } //左右子树都访问完了 pathVal.pop_back(); stk.pop(); } } return ret; } string GenHelper(vector<int> v) { int len = v.size(); string ret; if (len == 0) return ret; ret += to_string(v[0]); for (int i = 1; i < len; ++i) ret += ("->" + to_string(v[i])); return ret; }};class Solution1{public: //recusive vector<string> binaryTreePaths(TreeNode* root) { vector<string> ret; if (!root) return ret; FindHelp(ret, root, to_string(root->val)); return ret; } void FindHelp(vector<string>& ret, TreeNode* root, string str) { //退出条件:左右子树都为空 if (!root->left && !root->right) { ret.push_back(str); return; } if (root->left) { FindHelp(ret, root->left, str + "->" + to_string(root->left->val)); } if (root->right) { FindHelp(ret, root->right, str + "->" + to_string(root->right->val)); } }};void TEST(){ Solution sol; vector<int> v{ 1,2,3,-1,5 }; TreeNode* root = CreateTree(v); vector<string> ret = sol.binaryTreePaths(root); for (auto str : ret) cout << str << endl;}int main(){ TEST(); return 0;}
头文件
#ifndef _TREE_INCLUDE_H_ #define _TREE_INCLUDE_H_#include <iostream>#include <vector>#include <algorithm>#include <string>using namespace std;// 节点数据结构struct TreeNode{ int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};//使用数组创建二叉树void CreateNode(const vector<int>& v, TreeNode* cur, int curIndex){ int len = v.size(); if (len == 0 || cur == NULL || curIndex < 0 || curIndex >= len) return; if ((2 * curIndex + 1 < len) && (v[2*curIndex+1] != -1)) { TreeNode* tmp = new TreeNode(v[2 * curIndex + 1]); cur->left = tmp; } else cur->left = NULL; if ((2 * curIndex + 2 < len) && (v[2*curIndex+2] != -1)) { TreeNode* tmp = new TreeNode(v[2 * curIndex + 2]); cur->right = tmp; } else cur->right = NULL; CreateNode(v, cur->left, 2 * curIndex + 1); CreateNode(v, cur->right, 2 * curIndex + 2);}TreeNode* CreateTree(const vector<int>& v){ int len = v.size(); if (len == 0) return NULL; TreeNode* root = new TreeNode(v[0]); CreateNode(v, root, 0); return root;}void FirstOrderTraverse(TreeNode* root){ if (root == NULL) return; cout << root->val << " "; FirstOrderTraverse(root->left); FirstOrderTraverse(root->right); //cout << endl;}void MakeEmpty(TreeNode* root){ if (root != NULL) { MakeEmpty(root->left); MakeEmpty(root->right); delete root; }}#endif //
0 0
- [leetcode] 257. Binary Tree Paths
- 257. Binary Tree Paths LeetCode
- 【LeetCode】257. Binary Tree Paths
- LeetCode 257. Binary Tree Paths
- LeetCode *** 257. Binary Tree Paths
- leetcode 257. Binary Tree Paths
- LeetCode 257. Binary Tree Paths
- Leetcode 257. Binary Tree Paths
- LeetCode-257.Binary Tree Paths
- 【leetcode】257. Binary Tree Paths
- [Leetcode]257. Binary Tree Paths
- LeetCode - 257. Binary Tree Paths
- LeetCode 257. Binary Tree Paths
- [leetcode] 257. Binary Tree Paths
- LeetCode 257. Binary Tree Paths
- 257.[Leetcode]Binary Tree Paths
- LeetCode 257. Binary Tree Paths
- leetcode 257. Binary Tree Paths
- 在使用JAVA反射功能,调用class.getField()方法报错noSuchFieldException,几点解决方法
- 统计MySQL中每条sql的执行时间
- PTA基础题目5-26单词长度
- Caffe windows下入门级别的从编译到训练然后到分类(用python接口)资源下载(一)
- 事件代理
- leetcode 257. Binary Tree Paths
- oracle查询一个表被多少表引用
- c++ 实现 膨胀(dilate)腐蚀(erode)
- centos7 mysql数据库安装和配置
- 2006年北理复试上机题
- CodeForces contest/776 A+B+C题解
- SSH的配置文件(1)
- Apache与Tomcat有什么关系和区别,servlet是Tomcat里的一个接口标准
- jquery js 重置表单 reset()几种具体实现代码