leetcode : Binary Tree Paths
Given a binary tree, return all root-to-leaf paths.
For example, given the following binary tree:
- 1
- / \
- 2 3
- \
- 5
All root-to-leaf paths are:
- ["1->2->5", "1->3"]
思路:用两个stack<TreeNode*> in , s;
in : 记录当前的路径 p , 和vector<int>path 相同,只不过一个记录的是 val ,一个记录点的指针。
s : 记录每个节点的 p->right
v2s : 将path转换称符合要求的string
- /**
- * 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:string v2s(vector<int>a){
- const int len = a.size();
- string re = "";
- char *p = new char[];
- for (int i = ; i<len; i++){
- stringstream ss; // 需要包含头文件 #include<sstream>
- string temp;
- ss << a[i];
- ss >> temp;
- re = re + temp;
- if (i != len - )
- re = re + "->";
- }
- return re;
- }
- vector<string> binaryTreePaths(TreeNode* root) {
- vector<int> path;
- vector<string> re;
- if (root == NULL) return re;
- TreeNode * p = root;
- stack<TreeNode*> in, s;
- while (p != NULL){
- if (p->left == NULL&&p->right == NULL){
- in.push(p);
- path.push_back(p->val);
- re.push_back(v2s(path));
- if (s.empty())
- return re;
- else {
// 通过while循环,查找下一个需要遍历的点- while (!in.empty() && !s.empty() && (in.top())->right != s.top()){
- in.pop();
- path.erase(path.end()-);
- }
- p = s.top();
- s.pop();
- }
- }
- else if (p->left == NULL&&p->right != NULL){
- path.push_back(p->val);
- in.push(p);
- p = p->right;
- }
- else if (p->left != NULL&&p->right == NULL){
- path.push_back(p->val);
- in.push(p);
- p = p->left;
- }
- else{
- path.push_back(p->val);
- in.push(p);
- s.push(p->right);
- p = p->left;
- }
- }
- return re;
- }
- };
另一道相似题目
有一棵二叉树,树上每个点标有权值,权值各不相同,请设计一个算法算出权值最大的叶节点到权值最小的叶节点的距离。二叉树每条边的距离为1,一个节点经过多少条边到达另一个节点为这两个节点之间的距离。
给定二叉树的根节点root,请返回所求距离。
思路:只需要将保存的路径进行比较,相同的去掉然后相加,就能算出路径长度。
- /*
- struct TreeNode {
- int val;
- struct TreeNode *left;
- struct TreeNode *right;
- TreeNode(int x) :
- val(x), left(NULL), right(NULL) {
- }
- };*/
- class Tree {
- public:
- int getDis(TreeNode* root) {
- // write code here
- stack<TreeNode*> max, min;
- int m = INT_MIN, n = INT_MAX, re = 0;
- stack<TreeNode*> in, s;
- TreeNode *p = root;
- while (p != NULL){
- if (p->left == NULL&&p->right == NULL){
- in.push(p);
- if (p->val > m){
- max = in;
- m = p->val;
- }
- if (p->val < n){
- min = in;
- n = p->val;
- }
- while (!in.empty() && !s.empty() && (in.top())->right != s.top()){
- in.pop();
- }
- if (s.empty())
- break;
- else {
- p = s.top();
- s.pop();
- }
- }
- else if (p->left == NULL&&p->right != NULL){
- in.push(p);
- p = p->right;
- }
- else if (p->left != NULL&&p->right == NULL){
- in.push(p);
- p = p->left;
- }
- else {
- in.push(p);
- s.push(p->right);
- p = p->left;
- }
- }
- stack<TreeNode*> t1, t2;
- while (!max.empty()){
- t1.push(max.top());
- max.pop();
- }
- while (!min.empty()){
- t2.push(min.top());
- min.pop();
- }
- while (!t1.empty() && !t2.empty()){
- if (t1.top() != t2.top())
- break;
- else
- t1.pop(); t2.pop();
- }
- re = re + t1.size() + t2.size();
- return re;
- }
- };
leetcode : Binary Tree Paths的更多相关文章
- [LeetCode] Binary Tree Paths 二叉树路径
Given a binary tree, return all root-to-leaf paths. For example, given the following binary tree: 1 ...
- LeetCode——Binary Tree Paths
Description: Given a binary tree, return all root-to-leaf paths. For example, given the following bi ...
- Python3解leetcode Binary Tree Paths
问题描述: Given a binary tree, return all root-to-leaf paths. Note: A leaf is a node with no children. E ...
- LeetCode Binary Tree Paths(简单题)
题意: 给出一个二叉树,输出根到所有叶子节点的路径. 思路: 直接DFS一次,只需要判断是否到达了叶子,是就收集答案. /** * Definition for a binary tree node. ...
- leetcode Binary Tree Paths python
# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = ...
- 【LeetCode】257. Binary Tree Paths
Binary Tree Paths Given a binary tree, return all root-to-leaf paths. For example, given the followi ...
- <LeetCode OJ> 257. Binary Tree Paths
257. Binary Tree Paths Total Accepted: 29282 Total Submissions: 113527 Difficulty: Easy Given a bina ...
- [LintCode] Binary Tree Paths 二叉树路径
Given a binary tree, return all root-to-leaf paths.Example Given the following binary tree: 1 / \2 ...
- LeetCode_257. Binary Tree Paths
257. Binary Tree Paths Easy Given a binary tree, return all root-to-leaf paths. Note: A leaf is a no ...
随机推荐
- DataSet转化为实体集合类
/// <summary> /// DataSet转换为实体类 /// </summary> /// <typeparam name="T">实 ...
- 解决EP拒绝访问注册表Global键的的问题
问题描述 打开EP站点时出现如下Error: Message: An unhandled error has occurred. To view details about this error, ...
- Newtonsoft.Json异常处理
var resultStr="{\"Success\":false,\"Data\":1}"; GetRequestPriceRendaIn ...
- android studio 1.0 开发 ndk 调用 c++ so库
一个没用过java和安卓的人使用android studio开发带c++ so库的安卓程序用例(以ndk的hello-jni为例),对于不熟悉java和安卓的人来说这个很花时间,希望通过这篇文章帮助跟 ...
- Linux查看CPU和内存使用情况(转)
在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要.在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况.运行 top 命令后,CPU 使用状态会 ...
- UDS(ISO14229-2006) 汉译(No.2参考标准)
下列参考文件对本文件的系统是不可或缺的.注明日期的参考,仅关于对其引用的版本适用.未注明日期的,仅最新引用的文档(包括任何修改)适用. ISO 7498-1,信息技术——开放系统互联(OSI)——基本 ...
- JVM垃圾回收(GC)原理
一.基本垃圾回收算法 1.引用计数(Reference Counting) 比较古老的回收算法.原理是此对象有一个引用则增加一个引用计数,删除一个引用则较少一个引用计数.垃圾回收时,只回收引用计数为0 ...
- Html之 IFrame使用,注意几点
0x01 iframe的跳出框架 0x02 iframe样式设置 0x03 iframe重置高度 1.首先来一个,跳出iframe的好方法,直接可以在Login.aspx页面使用. if (windo ...
- css实现图片切换
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta http ...
- SharePoint 2013 User Profile Services之跨场设置
这段时间有个客户需要在不同SharePoint场中使用网站.文档和用户关注功能.但实际使用中发现默认的关注功能不能跨场使用,这也引出了我接下来的博客,我将在博客中详细描述整个过程. 因为“关注”功能是 ...