avatar
l*y
1
Given a binary tree, find the minimum sum from root to the leaf and also print that path?
avatar
C*y
2
1,能用自己的check支付I-140吗?
2,8papers,300引用,claim了pub和contribution。纠结要不要pp?
avatar
S*w
3
dp?

the

【在 l*********y 的大作中提到】
: Given a binary tree, find the minimum sum from root to the leaf and also print that path?
avatar
T*y
4

yes.
why not? well, nobody can ensure you the result.

【在 C*********y 的大作中提到】
: 1,能用自己的check支付I-140吗?
: 2,8papers,300引用,claim了pub和contribution。纠结要不要pp?

avatar
a*m
5
dij吧。
avatar
C*y
6
thanks. baozi sent
avatar
a*m
7
感觉dp似乎木有啥帮助。本来也是要遍历。

【在 S*******w 的大作中提到】
: dp?
:
: the

avatar
T*y
8
wow, thanks a lot! I didn't expect it.
Best wishes to you! May it pass like a breeze!

【在 C*********y 的大作中提到】
: thanks. baozi sent
avatar
S*w
9
shortest path algorithm都行啊

【在 S*******w 的大作中提到】
: dp?
:
: the

avatar
w*r
10
Yes,we used our own check.

【在 C*********y 的大作中提到】
: 1,能用自己的check支付I-140吗?
: 2,8papers,300引用,claim了pub和contribution。纠结要不要pp?

avatar
S*w
11
dp可以解。

【在 a********m 的大作中提到】
: 感觉dp似乎木有啥帮助。本来也是要遍历。
avatar
s*n
12
Strong enough for EB1b, you can try PP.

【在 C*********y 的大作中提到】
: 1,能用自己的check支付I-140吗?
: 2,8papers,300引用,claim了pub和contribution。纠结要不要pp?

avatar
q*x
13
有帮助。省下重复计算。

【在 a********m 的大作中提到】
: 感觉dp似乎木有啥帮助。本来也是要遍历。
avatar
s*t
14
Strong enough for EB1b, try pp
avatar
a*m
15
不管是遍历还是dij所有新节点的值都是没有计算过的。没有重复计算吧。

【在 q****x 的大作中提到】
: 有帮助。省下重复计算。
avatar
C*y
16
thanks guys. bao zi
avatar
l*y
17
难点在如何打印最短路径。dp的话得先遍历一遍才能得到有多少个节点吧。
avatar
l*y
18
Dij的话不是weight在边上,这个是weight在节点上。
avatar
a*m
19
这个无所谓。你可以把节点上的值当成it到父节点的路径weight。root的反正要加在所
有路径上,没关系了。

【在 l*********y 的大作中提到】
: Dij的话不是weight在边上,这个是weight在节点上。
avatar
q*x
20
那不就是dp。

【在 a********m 的大作中提到】
: 不管是遍历还是dij所有新节点的值都是没有计算过的。没有重复计算吧。
avatar
D*g
21
如果可以自定义tree node structure应该很容易,每个节点上加一个sumFromRoot和
parent指针就可以了。

print that path?

【在 l*********y 的大作中提到】
: Given a binary tree, find the minimum sum from root to the leaf and also print that path?
avatar
a*m
22
。。。。。。dp本质是避免重复计算呀。。。。木有重复计算咋算dp? 这个是俺自己的
理解, 哪个大牛来说一说?

【在 q****x 的大作中提到】
: 那不就是dp。
avatar
q*x
23
通过记录之前的结果避免重复计算。

【在 a********m 的大作中提到】
: 。。。。。。dp本质是避免重复计算呀。。。。木有重复计算咋算dp? 这个是俺自己的
: 理解, 哪个大牛来说一说?

avatar
y*u
24
这题和dp有什么关系啊
就是dfs,每次找到的路径sum可以作为约束,用来剪枝

站: BBS 未名空间站 (Sun Jan 1 22:36:30 2012, 美东)

【在 S*******w 的大作中提到】
: dp可以解。
avatar
y*u
25
不需要
维护2个stack,每次Pop的时候,第一个stack得到访问的节点,第二个stack是根到该
节点的sum

【在 a********m 的大作中提到】
: 。。。。。。dp本质是避免重复计算呀。。。。木有重复计算咋算dp? 这个是俺自己的
: 理解, 哪个大牛来说一说?

avatar
H*e
26
这题跟dp啥关系啊?
也用不着dijkstra,就是简单的pre-order traversal就可以勒。
inside a class:
private List minPath = new ArrayList();
private int minSum = Integer.MAX_VALUE;
private void minSumPathFromRootToLeave(BSTNode node,
ArrayList path, int currentSum) {
//path is the path from root to node's parent,
//currentSum is sum from root till node's parent
// add base cases here:
if(node == null){
return;
}

currentSum = currentSum + node.key;
path.add(node);

if (node.left == null && node.right == null) {
if (currentSum < minSum) {
minSum = currentSum;
minPath.clear();
minPath.addAll(path);
}
return;
}
minSumPathFromRootToLeave(node.left, path, currentSum);
minSumPathFromRootToLeave(node.right, path, currentSum);
path.remove(node);
}
public void printMinSumPathFromRootToLeave() {
ArrayList path = new ArrayList();
int currentSum = 0;
minSumPathFromRootToLeave(root, path, currentSum);
for (BSTNode node : minPath) {
System.out.print(node.key + " ");
}
}
avatar
a*m
27
恩。dij还要排序,不值得。直接遍历就好了。

【在 H***e 的大作中提到】
: 这题跟dp啥关系啊?
: 也用不着dijkstra,就是简单的pre-order traversal就可以勒。
: inside a class:
: private List minPath = new ArrayList();
: private int minSum = Integer.MAX_VALUE;
: private void minSumPathFromRootToLeave(BSTNode node,
: ArrayList path, int currentSum) {
: //path is the path from root to node's parent,
: //currentSum is sum from root till node's parent
: // add base cases here:

avatar
p*2
28
我写了个C#的,发现在纸上写好,到了VS上还是要改很多。
static void minSum(Node root)
{
if (root == null)
return;
List list = new List();
List minlist = new List();
list.Add(root);
Check(list, ref minlist);
Console.WriteLine(minlist.Count-1);
foreach (Node i in minlist)
i.Print();
}
static void Check(List list, ref List minlist)
{
Node node = list[list.Count - 1];
if (node.left == null && node.right==null)
{
if (minlist.Count==0 || minlist.Count>list.Count)
{
minlist.Clear();
minlist.AddRange(list);
}
}
else
{
if (node.left != null)
{
list.Add(node.left);
Check(list, ref minlist);
}
if (node.right != null)
{
list.Add(node.right);
Check(list, ref minlist);
}
}
list.RemoveAt(list.Count - 1);
}
avatar
f*l
29
C++ version
class Node
{
public:
Node() {
leftChild = NULL ;
rightChild = NULL ;
}
~Node() {}
int value ;
Node *leftChild ;
Node *rightChild ;
};
// pre-order traverse
void traverseTree(Node *treeNode, vector &path , vector *> &miniPath, int &minSum, int &currentSum)
{
if ( treeNode!=NULL )
{
currentSum += treeNode->value ;
}
else
{
if( currentSum < minSum )
{
minSum = currentSum ;
miniPath.clear() ;
for (int i = 0 ; i < path.size() ; i++)
{
miniPath.push_back( path[i] );
}
}
return ;
}
if ( currentSum > minSum )
{
return ;
}
path.push_back(treeNode) ;
traverseTree(treeNode->leftChild, path, miniPath, minSum, currentSum) ;
traverseTree(treeNode->rightChild, path, miniPath, minSum, currentSum) ;
path.pop_back();
currentSum -= treeNode->value ;
return ;
}

【在 p*****2 的大作中提到】
: 我写了个C#的,发现在纸上写好,到了VS上还是要改很多。
: static void minSum(Node root)
: {
: if (root == null)
: return;
: List list = new List();
: List minlist = new List();
: list.Add(root);
: Check(list, ref minlist);
: Console.WriteLine(minlist.Count-1);

avatar
m*n
30
public int miniSum(Node tree) {
if(tree==null) return 0;
if(tree!=null && tree.left ==null && tree.right==null) return tree.
value;
int left= miniSum(tree.left);
int right = miniSum(tree.right);
return Math.min(left,right)+tree.value;
}
avatar
m*n
31
带返回路径的
public int miniSum(Node tree, ArrayList pre) {
if(tree==null) return 0;
if(tree!=null && tree.left ==null && tree.right==null) {
pre.add(tree);
return tree.value;
}
ArrayList storeresult = new ArrayList();
int left= miniSum(tree.left, storeresult);
ArrayList storeresultright = new ArrayList();
int right = miniSum(tree.right,storeresultright);
pre.add(tree);
if(leftpre.addAll(storeresult);
}
else{
pre.addAll(storeresultright);
}
return Math.min(left,right)+tree.value;
}
avatar
h*w
32
mark一下,顺便support这个解法

【在 H***e 的大作中提到】
: 这题跟dp啥关系啊?
: 也用不着dijkstra,就是简单的pre-order traversal就可以勒。
: inside a class:
: private List minPath = new ArrayList();
: private int minSum = Integer.MAX_VALUE;
: private void minSumPathFromRootToLeave(BSTNode node,
: ArrayList path, int currentSum) {
: //path is the path from root to node's parent,
: //currentSum is sum from root till node's parent
: // add base cases here:

avatar
z*w
33
嗯,直接DFS就可以了O(V+E)
avatar
e*s
34
请教大牛,
List 不是应该 pass by reference implicity吗?为什么要ref 在前面?

【在 p*****2 的大作中提到】
: 我写了个C#的,发现在纸上写好,到了VS上还是要改很多。
: static void minSum(Node root)
: {
: if (root == null)
: return;
: List list = new List();
: List minlist = new List();
: list.Add(root);
: Check(list, ref minlist);
: Console.WriteLine(minlist.Count-1);

avatar
e*s
35
我编译跑了一遍,不对啊。。。。。。

【在 p*****2 的大作中提到】
: 我写了个C#的,发现在纸上写好,到了VS上还是要改很多。
: static void minSum(Node root)
: {
: if (root == null)
: return;
: List list = new List();
: List minlist = new List();
: list.Add(root);
: Check(list, ref minlist);
: Console.WriteLine(minlist.Count-1);

avatar
e*s
36
要改这一句才对吧
minlist.Sum(n => n.Value) > list.Sum(n => n.Value)

【在 p*****2 的大作中提到】
: 我写了个C#的,发现在纸上写好,到了VS上还是要改很多。
: static void minSum(Node root)
: {
: if (root == null)
: return;
: List list = new List();
: List minlist = new List();
: list.Add(root);
: Check(list, ref minlist);
: Console.WriteLine(minlist.Count-1);

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。