p*****2 发帖数: 21240 | 1
我写了一下,大数据有run time error.
int[] dfs(TreeNode root)
{
int[] ans=new int[2];
Arrays.fill(ans, Integer.MIN_VALUE);
if(root!=null)
{
int[] l_ans=dfs(root.left);
int[] r_ans=dfs(root.right);
ans[0]=Math.max(l_ans[0], r_ans[0]);
ans[1]=Math.max(l_ans[1], r_ans[1]);
ans[1]=ans[1]<0?root.val:root.val+ans[1];
int m=root.val;
if(l_ans[1]>0)
m+=... 阅读全帖 |
|
g*****e 发帖数: 282 | 2 也凑个热闹,假设tree nodes的值都是正整数。如果subtree是null认为root(即null
)值是0,非unival sub tree的node是-1.
int count=0;
getUnivalNode(root);
int getUnivalNode(node root)
{
if (root == null)
{
return 0;
}
int left = getUnivalNode(root.left);
int right = getUnivalNode(root.right);
if ((left == 0 || left == root.val)
&& (right == 0 || right == root.val))
{
count++;
return root.val;
}
return -1;
... 阅读全帖 |
|
p*****2 发帖数: 21240 | 3 int dfs(TreeNode root)
{
if(root==null)
return 0;
int l=dfs(root.left);
int r=dfs(root.right);
int m=root.val;
if(l>0) m+=l;
if(r>0) m+=r;
max=Math.max(max,m);
return Math.max(l,r)>0?Math.max(l,r)+root.val:root.val;
} |
|
h**********y 发帖数: 1293 | 4 直接用的你的code阿。。哪里要reset?
int dfs(TreeNode root)
{
if(root==null)
return 0;
int l=dfs(root.left);
int r=dfs(root.right);
int m=root.val;
if(l>0) m+=l;
if(r>0) m+=r;
max=Math.max(max,m);
return Math.max(l,r)>0?Math.max(l,r)+root.val:root.val;
} |
|
b*****u 发帖数: 648 | 5 递归,有点tricky的地方在于递归函数每次返回的是最大的单侧路径,但同时把两侧加
自己的和与记录的最大值比较,最终返回的是那个记录值
class Solution {
public:
int maxPathSum(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int maxSoFar= root->val;
int tmp = maxContainRoot(root, maxSoFar);
return maxSoFar;
}
int maxContainRoot(TreeNode *root, int& maxSoFar)
{
if (root == NULL) return 0;
int leftMax = maxContainRoot(root->left,maxSoFar);
... 阅读全帖 |
|
l*******b 发帖数: 2586 | 6 int maxPathSum(Node *h) {
int m = h->val;
stack ss;
stack ms;
Node *ret = NULL;
while(h || !ss.empty()) {
if(h) {
ss.push(h);
h = h->l;
continue;
}
h = ss.top();
if(NULL == h->r || ret == h->r) {
int mr = 0, ml = 0;
if(h->r) { mr = max(ms.top(), 0); ms.pop();}
if(h->l) { ml = max(ms.top(), 0); ms.p... 阅读全帖 |
|
l*******b 发帖数: 2586 | 7 int maxPathSII(Node *h) {
int m = h->val;
int res = helper(h, m);
return m;
}
int helper(Node *h, int &m) {
if(NULL == h) return 0;
int ml = max(helper(h->l, m), 0);
int mr = max(helper(h->r, m), 0);
m = max(m, h->val + mr + ml);
return h->val + max(mr, ml);
}
学习一下递归的写法。。 |
|
l*********8 发帖数: 4642 | 8 贴个代码吧:
int scanPostOrder(int *A, int idx, int minVal, int maxVal)
{
if (idx < 0 || A[idx] < minVal || A[idx] > maxVal)
return idx; //如果不能满足数值范围,或者已经扫描完毕,就返回到父节点
int val = A[idx];
idx = scanPostOrder(A, idx-1, val, maxVal); // 右子树
return scanPostOrder(A, idx, minVal, val); // 左子树
}
bool checkPostOrder(int *A, int n)
{
return scanPostOrder(A, n-1, INT_MIN, INT_MAX) < 0;
} |
|
p*****2 发帖数: 21240 | 9 def cal(str:String):Int={
val numbers=str.split("[+-/*]").map(_.toInt)
val operators=str.filterNot(_.isDigit)
var result=numbers(0)
for(i<-0 until operators.length) operators(i) match{
case '+' => result+=numbers(i+1)
case '-' => result-=numbers(i+1)
case '*' => result*=numbers(i+1)
case '/' => result/=numbers(i+1)
}
result
}
def solve(str:String):Int={
val plusminus= -... 阅读全帖 |
|
p*****2 发帖数: 21240 | 10 def cal(str:String):Int={
val numbers=str.split("[+-/*]").map(_.toInt)
val operators=str.filterNot(_.isDigit)
var result=numbers(0)
for(i<-0 until operators.length) operators(i) match{
case '+' => result+=numbers(i+1)
case '-' => result-=numbers(i+1)
case '*' => result*=numbers(i+1)
case '/' => result/=numbers(i+1)
}
result
}
def solve(str:String):Int={
val plusminus= -... 阅读全帖 |
|
p*****2 发帖数: 21240 | 11 来自主题: JobHunting版 - G 家面经 第一题练了练。没有测试。
class QTreeNode (var color:Int){
val children=new Array[QTreeNode](4)
}
def clone(root:QTreeNode):QTreeNode={
if(root==null) return null
val newNode=new QTreeNode(root.color)
for(i<-0 until 4) newNode.children(i)=clone(root.children(i))
newNode
}
def intersection(left:QTreeNode, right:QTreeNode):QTreeNode={
if(left.color==2 && right.color==2){
val newNode=new QTreeNode(2)
for(i<-0 until 4) newNode.ch... 阅读全帖 |
|
p*****2 发帖数: 21240 | 12 来自主题: JobHunting版 - G 家面经
随便搞了一个。不是balanced
class Node(arr:Array[Int], start:Int, end:Int){
val minid=arr.indexOf(arr.slice(start,end+1).min,start)
val left=if(start
val right=if(end>minid) new Node(arr,minid+1,end) else null
def query(s:Int, e:Int):Int={
if(e
if(s>minid) return right.query(s,e)
arr(minid)
}
} |
|
p*****2 发帖数: 21240 | 13 来自主题: JobHunting版 - G 家面经 第一题练了练。没有测试。
class QTreeNode (var color:Int){
val children=new Array[QTreeNode](4)
}
def clone(root:QTreeNode):QTreeNode={
if(root==null) return null
val newNode=new QTreeNode(root.color)
for(i<-0 until 4) newNode.children(i)=clone(root.children(i))
newNode
}
def intersection(left:QTreeNode, right:QTreeNode):QTreeNode={
if(left.color==2 && right.color==2){
val newNode=new QTreeNode(2)
for(i<-0 until 4) newNode.ch... 阅读全帖 |
|
p*****2 发帖数: 21240 | 14 来自主题: JobHunting版 - G 家面经
随便搞了一个。不是balanced
class Node(arr:Array[Int], start:Int, end:Int){
val minid=arr.indexOf(arr.slice(start,end+1).min,start)
val left=if(start
val right=if(end>minid) new Node(arr,minid+1,end) else null
def query(s:Int, e:Int):Int={
if(e
if(s>minid) return right.query(s,e)
arr(minid)
}
} |
|
p*****2 发帖数: 21240 | 15
我写了一个练练。
def next(a:Array[Int], t:Int):Int={
val arr=a.map(i=>(i+'0').toChar)
val target=t.toString
util.Sorting.quickSort(arr)
for(i<-target.length-1 to 0 by -1){
val next=arr.find(v=>v>target(i))
if(next.nonEmpty) return (target.slice(0,i)++next.get.toString++
arr(0).toString*(target.length-1-i)).toInt
}
(arr(0).toString*(target.length+1)).toInt
} |
|
c********t 发帖数: 5706 | 16 嗯,就是你这个算法,O(n*sqrt(n)),改了改ben5736的codes 不知过不过的了大case;
public static int cyclic(String s) {
int len = s.length();
if (len <= 1)
return 1;
ArrayList factors = get_factors(len);
for (int i = factors.size() - 1; i >= 0; i--) {
int fctr = factors.get(i);
if (valid_cyclic(s, fctr))
return fctr;
}
return len;
}
static boolean valid_cyclic(String s, int v) {
for (int i = 0, j = v; i < s.length(); i++, j++) {
if (j == s.... 阅读全帖 |
|
c********t 发帖数: 5706 | 17 嗯,就是你这个算法,O(n*sqrt(n)),改了改ben5736的codes 不知过不过的了大case;
public static int cyclic(String s) {
int len = s.length();
if (len <= 1)
return 1;
ArrayList factors = get_factors(len);
for (int i = factors.size() - 1; i >= 0; i--) {
int fctr = factors.get(i);
if (valid_cyclic(s, fctr))
return fctr;
}
return len;
}
static boolean valid_cyclic(String s, int v) {
for (int i = 0, j = v; i < s.length(); i++, j++) {
if (j == s.... 阅读全帖 |
|
l***i 发帖数: 1309 | 18 这个问题很贱,有一种做法是swap两个node的实际内容,然后删除后一个。当然如果要
删除的是tail就没办法这么搞了。
typedef int ItemType;
struct node {
ItemType val;
node *next;
};
node* delete(node *ptr)
{
if (ptr == NULL) return;
if (ptr->next == NULL) return; // do something like report error
node *next = ptr->next;
swap(ptr->val, next->val);
ptr->next = next->next;
next->next = NULL;
return next;
} |
|
x******a 发帖数: 6336 | 19 Thanks a lot! it worked.
再请教一个问题:我想历遍一个通过frontinsert生成的linkedlist,为什么看不到第
一个insert的元素?谢谢
#include
#include "singlylinkedlist.h"
int main(int argc, const char * argv[])
{
SingleLinkedList aList;
int i=0;
while(i<10){
aList.firstInsert(i);
++i;
}
aList.traverse();
}
输出是
9 8 7 6 5 4 3 2 1
没有0
template< typename T> class ListElement;
template< typename T> class SingleLinkedList;
template
class ListElement{
public:
ListElement(cons... 阅读全帖 |
|
p*****2 发帖数: 21240 | 20 def solve(s:String):Int={
val n=s.length
val pos=Array.ofDim[Boolean](n,n)
val dp=Array.tabulate(n+1)(i=>n-i)
for(i<-n-1 to 0 by -1; j<-i until n if(s(i)==s(j) && (j-i<2 || pos(i
+1)(j-1)))){
pos(i)(j)=true
dp(i)=math.min(dp(i), 1+dp(j+1))
}
return dp(0)-1
} |
|
p*****2 发帖数: 21240 | 21 刚做了一题,感觉不错。准备好好做做了。哈哈。我这个代码过了第一题
object Solution {
def main(args: Array[String]) {
val n=readLine.toInt
val arr=readLine.split(" ").map(_.toInt)
val last=arr.last
var i=arr.length-2
while(i>=0 && arr(i)>last) {arr(i+1)=arr(i); println(arr.mkString("
"));i-=1}
arr(i+1)=last
println(arr.mkString(" "))
}
} |
|
a******3 发帖数: 113 | 22 定义了一个
val map = new ConcurrentSkipListMap[Key, Value]()
因为要实现多线程,需要重写他的iterator
我的代码如下
def keyIterator: Iterator[Key] = new Iterator[Key] {
val newMap=getMapClone
var set=newMap.keySet()
var pos = 0
def hasNext = pos < newMap.size()
def next: Key = { val z = array(pos) ; pos += 1 ; z }
}
[error] found : Int
[error] required: Key
array(pos)这方法貌似是通过key去访问,但是我想通过index去访问这个set,该怎么
写呢?或者有什么办法可以iterate这个map的key集合吗
本人新手,无奈网上找不到,求各位不吝赐教 |
|
a******3 发帖数: 113 | 23
def keyIterator: Iterator[Key] = new Iterator[Key] {
val newMap=getMapClone
var array=newMap.keySet().toArray
var pos = 0
def hasNext = pos < newMap.size()
def next: Key = { val z = array(pos) ; pos += 1 ; z }
}
[error] found : z.type (with underlying type Object)
[error] required: Key
[error] def next: Key = { val z = array(pos) ; pos += 1 ; z }
[error] one error found
然后变成获取的内容有问题了。。 |
|
d*******3 发帖数: 58 | 24 @recursive 和@fatalme的蠕虫算法好,我试着写了下
struct Tuple
{
int val;
char from;//A,B,or C
};
int MinAbsDiff(vectr& A,vector& B,vector& C)
{
sort(A.begin(),A.end());
sort(B.begin(),B.end());
sort(C.begin(),C.end());
vector D = Merge(A,B,C);
int findCount[3]={0};
int count = 0;
int ans = 2147483647;
for(int start =0,end =0;end < D.length();end++)
{
if(findCount[D[end].from-'A'] == 0)count++:
findCount[D[end].from-'A']++;
... 阅读全帖 |
|
q*******z 发帖数: 62 | 25 根据三楼的做法,用C++写了一个,根据STL的文档应该是O(N+K)的时间复杂度,空间复
杂度不太清楚:
vector topK(vector> arrs, int N, int K)
{
priority_queue a;
unordered_multimap idxs;
for(int i = 0; i < N; i++)
{
if(!arrs[i].empty())
{
idxs.insert(make_pair(arrs[i].back(),i));
a.push(arrs[i].back());
arrs[i].pop_back();
}
}
vector r;
for(int i = 0; i <... 阅读全帖 |
|
f****s 发帖数: 74 | 26 leetcode上给出的思想很好。就是keep一个pre和一个cur,
如果cur是pre的孩子,说明我们正从上到下,如果反过来,说明我们从下往上,就该打
印节点了。
顺便练一个,
void postorder(Node* r)
{
if(!r) return;
stack s;
Node* pre=0;
Node* cur=r;
s.push(r);
while(!s.empty()){
cur=s.top();
if(pre==0||cur==pre->left||cur==pre->right){
if(cur->left) s.push(cur->left);
else if(cur->right) s.push(cur->right);
else{
cout<val;
s.pop();
}
}else{
if(pre=cu... 阅读全帖 |
|
f********d 发帖数: 51 | 27 and the reason why scala throws error is because of the way it treats def
and val
you can do:
class A {def a="a"}
class B extends A { override val a="b"}
if you go with javap, you will get:
public class B extends A{
public java.lang.String a();
public B()
}
at byte code level, val is indeed converted to a method. in other word,
scala doesn't treat the field as real field but methods.
methods obviously need to follow method resolution which is override.
technically, scala is really following jvm ... 阅读全帖 |
|
r*********n 发帖数: 4553 | 28 要考虑overflow,为什么不从低位加到高位呢?
假如当前位的值是cur,判断一下之前位总和val是不是满足
val <= numeric_limits::max() - cur
如果满足,则val += cur and recurse,否则throw overflow_error。这里有一个问题
是连续很多零,直接导致遇到非零位计算cur的时候,cur直接overflow,但这个问题很
好解决,只要track连续零的个数即可。 |
|
c*u 发帖数: 22 | 29 这样可以么? list 保存每一轮数值并用变量记下该轮最大值:
从上往下
string filename = "data.txt";
if (File.Exists(filename))
{
string line;
List list = new List();
StreamReader sr = File.OpenText(filename);
int max = 0;
while ((line = sr.ReadLine()) != null)
{
int[] array = line.Trim().Split(' ').Select(n => int.Parse(n)).ToArray<
int>();
int size = array.Count();
if (size ==1)
{
list.Add( array[0]);
max = list[0];
}
else if (size>1)
{
int next=0, val = 0;
... 阅读全帖 |
|
x****8 发帖数: 127 | 30 private static void printCombinations(String string) {
List positions = new ArrayList();
List values = new ArrayList();
for(int i = 0; i < string.length(); ++i){
if(string.charAt(i) == '?'){
positions.add(i);
values.add(-1);
}
}
int pos = 0;
while(pos >= 0){
int val = values.get(pos) + 1;
if(val == 2){
values.set(p... 阅读全帖 |
|
s*********d 发帖数: 2406 | 31 完成第一部分,regex好像很难,我google了一堆好像没有perfect方案
现在这个也很占内存
public HashSet readfromfile(String filename) {
HashSet plist=new HashSet() ;
try {
File file = new File(filename);
if (file.exists()) {
BufferedReader input = new BufferedReader(new FileReader(
file));
String line = null;
while ((line = input.readLine()) != null) {
StringBuffer paralist=new StringBuffer... 阅读全帖 |
|
j********r 发帖数: 25 | 32 /**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *partition(ListNode *head, int x) {
ListNode dummy(0);
ListNode dummy2(0);
ListNode *p = &dummy;
ListNode *pp = &dummy2;
while(head) {
if (head->val < x) {
p->next = head;
p = p->next;
}
else {
... 阅读全帖 |
|
p****U 发帖数: 109 | 33 如果他要用双指针做参数, 还是用double pointer吧, 用 dummy head的话,感觉会
让interviewer 觉得理解指针不够透彻。
void removeNode(int val, ListNode **list) {
while(*list!=NULL){
if((*list)->val==val){
ListNode *next=(*list)->next;
delete *list;
*list=next;
}
else {
list=&(*list)->next;
}
}
} |
|
p****U 发帖数: 109 | 34 如果他要用双指针做参数, 还是用double pointer吧, 用 dummy head的话,感觉会
让interviewer 觉得理解指针不够透彻。
void removeNode(int val, ListNode **list) {
while(*list!=NULL){
if((*list)->val==val){
ListNode *next=(*list)->next;
delete *list;
*list=next;
}
else {
list=&(*list)->next;
}
}
} |
|
a**d 发帖数: 85 | 35 You are getting a stream of characters and at any time you can be asked to
find out if the string received yet is palindrome or not.
There can be multiple queries. O(n) and No extra space.
在careercup上看到的。
int val=0,每次有一个新的char进来,就val ^ new char.
query时候就看val是否为0.
如果query是在读完第一个char之后,那就return true。
大家觉得这样对不? |
|
b********6 发帖数: 97 | 36 贴个我刚通过的解法 608ms
public class LRUCache {
static public class Pair {
int key;
int val;
Pair before;
Pair next;
public Pair(int k, int v){
key = k;
val = v;
before = null;
next = null;
}
}
//private LinkedList< Pair > item_list ;
//private ArrayDeque item_list;
private Pair head;
private Pair tail;
private HashMap item_map;
private int cap;
... 阅读全帖 |
|
l******a 发帖数: 64 | 37 4.2. 第四轮第二个, Harry Potter那道题试写了一下伪代码
memo[m+1][n+1]
For i in [0, m]
For j in [0, n]
Memo[i][j] = 0
For i in [0, m-1]
For j in [0, n-1]
Memo[i+1][j+1] = Memo[i][j+1] + grid[i][j]
Memo[i+1][j+1] = max(Memo[i+1][j+1] ,Memo[i][j+1] + grid[i][j])
val = Memo[m][n]-grid[m-1][n-1]
If val < 0
return -val
Else
Return 0 |
|
l******s 发帖数: 3045 | 38 A validated C# Enumerator solution.
public class EmbeddedList : IEnumerable{
private bool isValue;
private T val;
private IList> ElementList = new List>();
public EmbeddedList() { isValue = false; }
public EmbeddedList(T t) { val = t; isValue = true; }
public void Add(T t){
EmbeddedList newElement = new EmbeddedList(t);
ElementList.Add(newElement);
}
public void Add(EmbeddedList E) { ElementList.Ad... 阅读全帖 |
|
l******s 发帖数: 3045 | 39 A validated C# Enumerator solution.
public class EmbeddedList : IEnumerable{
private bool isValue;
private T val;
private IList> ElementList = new List>();
public EmbeddedList() { isValue = false; }
public EmbeddedList(T t) { val = t; isValue = true; }
public void Add(T t){
EmbeddedList newElement = new EmbeddedList(t);
ElementList.Add(newElement);
}
public void Add(EmbeddedList E) { ElementList.Ad... 阅读全帖 |
|
q****m 发帖数: 177 | 40 相对顺序一样也可以的话用递归也可以吧
void common(node *r1,node*r2)
{
if(!r1 || !r2) return;
if(r1→val == r2→val) cout <
common(r1→left,r2→left);
common(r1→right,r2→right);
} |
|
c****d 发帖数: 116 | 41 我觉得可以这样做
假定string里面只有0-9, a-z, A-Z这些字符ch.
对字符串i, 建立一个a[ch][i]数组, 比如有
a[0][i] = 1; // if char '0' in string i
a[0][i] = 0; // otherwise
...
a[61][i] = 1; // if char 'Z' in string i
a[61][i] = 0; // otherise
然后都a[62][n]进行处理
for (i = 0; i < n - 1; i++)
{
for (j = i + 1; j < n; j++)
{
for (k = 0; k < 62; k++ )
{
val = val && (a[k][i] ^ a[k][j])
}
if (val)
{
if (max < i * j)
{
max = i * j
and remember i, j
}
}
}
} |
|
l*********8 发帖数: 4642 | 42 又写了一遍,供参考
int getValue(const char * &expr) {
int val;
sscanf(expr, "%d", &val);
while (isdigit(*++expr))
;
return val;
}
int evaluate(const char *expr) {
if (!expr || !*expr) return 0;
int ans = getValue(expr);
while (*expr == '*' || *expr == '/') {
if (*expr == '*')
ans *= getValue(++expr);
else
ans /= getValue(++expr);
}
return ans + evaluate(expr);
} |
|
R******9 发帖数: 267 | 43 first print the left boundary, then all the leaves, and the right boundary.
1
2 3
4 5 6
7 8 9
should be 1 2 4 7 8 9 6 3.
void traverse(Node* root, bool left_most, bool right_most)
{
if (!root) return; // bottom condition
if (left_most) cout << root->val << ' '; //先序打印左边界
traverse(root->left, left_most, false);
if (!root->left && !root->right && !left_most && !right_most) cout <<
root->val << ' '; //中叙打印叶子
tr... 阅读全帖 |
|
T******g 发帖数: 790 | 44 实现一个算法来判断一个字符串中的字符是否唯一(即没有重复).不能使用额外的数据
结构。 (即只使用基本的数据结构)
public boolean isUniqueChars2(String str) {
int checker = 0;
for (int i = 0; i < str.length(); i++) {
int val = str.charAt(i) - 'a';
if ((checker & (1 << val)) > 0) {
return false;
} else {
checker |= (1 << val);
}
}
return true;
}
看不懂啊
|
|
M*****M 发帖数: 20 | 45 来自主题: JobHunting版 - 一道面试题 类似找最大BST subtree, bottom up.
bool findsubtree(TreeNode *node, unordered_set &set, vector
&vec) {
if(not node) {
return true;
}
unordered_set leftset;
unordered_set rightset;
bool left = findsubtree(node->left, leftset, vec);
bool right = findsubtree(node->right, rightset, vec);
if(left&&right) {
//leftset and rightset overlap
for(auto ele:leftset) {
if(rightset.find(ele)!=rightset.end()) {
... 阅读全帖 |
|
f**********t 发帖数: 1001 | 46 来自主题: JobHunting版 - 一道面试题 bool UniqueBTrees(Node *root, vector &res, unordered_set &us) {
unordered_set lus;
unordered_set rus;
if ((!root->left || UniqueBTrees(root->left, res)) &&
(!root->right || UniqueBTrees(root->right, res)) &&
lus.find(root->val) == lus.end() &&
rus.find(root->val) == rus.end()) {
res.push_back(root);
for (int x : lus) {
us.insert(x);
}
for (int y : lus) {
us.insert(y);
}
us.insert(root->val);
return true;
} el... 阅读全帖 |
|
f**********t 发帖数: 1001 | 47 Well, my code is complex and sigfault. Let me go back if I have time.
This is too hard for a 45 minutes interview.
void skipSpace(const char **s) {
while (isspace(**s)) {
++(*s);
}
}
int getNum(const char **s) {
bool neg = false;
if (**s == '-') {
neg = true;
++(*s);
}
int cur = 0;
while (isdigit(**s)) {
cur = cur * 10 + (**s - '0');
++(*s);
}
--(*s);
return neg ? -cur : cur;
}
int opNum(int x, int y, char op) {
switch (op) {
case '+':
return x + y... 阅读全帖 |
|
p*****2 发帖数: 21240 | 48 val st: Stream[Int] = {
val pq = new PriorityQueue[Int]()
pq.add(1)
def loop(curr:Int): Stream[Int] = {
while(pq.peek()<=curr) pq.poll()
val c = pq.poll()
pq.add(c*2)
pq.add(c*3)
pq.add(c*5)
c #:: loop(c)
}
loop(0)
} |
|
C*******n 发帖数: 193 | 49 /**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector inorderTraversal(TreeNode *root) {
vector ret;
if(root) {
stack stack;
stack.push(root);
TreeNode* top = stack.top();
while(!stack.empty() || top!=NULL){
... 阅读全帖 |
|
w*****t 发帖数: 485 | 50 share 一个:
int maxLeafPath(TreeNode *root, int &maxPath)
{
if (!root) return INT_MIN;
if (!root->left && !root->right) return root->val;
int leftPath = maxLeafPath(root->left, maxPath);
int rightPath = maxLeafPath(root->right, maxPath);
if (root->left && root->right)
maxPath = max(maxPath, root->val + leftPath + rightPath);
return root->val + max(leftPath, rightPath);
}
int maxLeafPath(TreeNode *root)
{
... 阅读全帖 |
|