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 ...
随机推荐
- 【C#公共帮助类】给大家分享一些加密算法 (DES、HashCode、RSA、AES等)
AES 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的 ...
- 【JAVA并发编程实战】12、使用condition实现多线程下的有界缓存先进先出队列
package cn.study.concurrency.ch14; import java.util.concurrent.locks.Condition; import java.util.con ...
- Maven学习随笔一——Maven安装报错处理(mvn -v, 提示不是内部命令的问题)
今天心血来潮学习maven,可是光安装就花了个把小时,好坑有木有! 安装过程可百度,各种经贴,不详. 控制台输入 mvn -v ,如果报错,很可能是你的java/maven的环境变量配置出了点问题: ...
- kmdjs api reference
总览 kmdjs的主要就两个API:kmdjs.config和define kmdjs.config kmdjs.config是用于项目整体配置,一般的配置如下所示: kmdjs.config({ n ...
- 独立IP 与 共享IP
最近在阿里云产品体系中折腾的不亦乐乎,在选则服务器的时候,会有独立IP和共享IP的两种不同的选择,这里查阅资料予以记录,独立IP与共享IP的区别: 因为IP资源有限,独立IP就是说一个IP地址只给你一 ...
- 关于checkbox的全选和反选实例
<script type="text/javascript"> $(function () { $("#checkAll").click(funct ...
- html之file标签 --- 图片上传前预览 -- FileReader
记得以前做网站时,曾经需要实现一个图片上传到服务器前,先预览的功能.当时用html的<input type="file"/>标签一直实现不了,最后舍弃了这个标签,使用了 ...
- Android的Message Pool是什么——源码角度分析
原文地址: http://blog.csdn.net/xplee0576/article/details/46875555 Android中,我们在线程之间通信传递通常采用Android的消息机制,而 ...
- GCD
Grand Central Dispatch(GCD)包含语言特点.运行库和系统增强功能,它提供系统的.综合的改进,进而去支持并发代码在iOS和OSX多核硬件上的执行. 子系统.CoreFoundat ...
- iOS之UIApplication详解
UIApplication对象特点: 特点1: UIApplication对象是应用程序的象征,一个UIApplication对象就代表一个应用程序,而且是单例的.(用来封装整个应用程序的一个对象, ...