更新
这道题我实际遇见了,还真是bst
题目中给的两个样例是
10
/ \
5 15
和
7
/ \
3 10
/ / \
1 8 12
笔试的时候慌了一下,其实如上的题目一个while就解决了,我真的不知道自己在递归个什么劲儿。
顺便注意,只能写一个function。我之前写的算法是有问题的,我多给了一个参数。在笔试的时候我就自己卡在这个问题上了。
=====================================
先来看看bst定义.
二叉查找树(英语:Binary Search Tree),也称二叉搜索树、有序二叉树(英语:ordered binary tree),排序二叉树(英语:sorted binary tree),是指一棵空树或者具有下列性质的二叉树:
- 若任意节点的左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值;
- 任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
- 任意节点的左、右子树也分别为二叉查找树。
- 没有键值相等的节点(英语:no duplicate nodes)。
小哥说是给出树和root,从root到leaves权值最小的路径。返回root到所有leave中的最短路径长度。权值指每个节点的value。
那不就是直接全部左边吗。。。
不过姑且还是写了一个。如果树真的是bst,我都无力吐槽了。
在我的假设中,可爱的小树长成这样。也不管什么平衡什么的了,是棵树就好了:
1
/ \
2 3
/ \ \
4 5 6
/
20
private static int FindShortestWay(node root, int route) {if(root!=null){route += root.val; FindShortestWay(root.left,route);FindShortestWay(root.right,route);if(root.left == null && root.right == null){if(min > route){min = route;}}}return min;}
对了,其实应该是要返回最小路径的,也就是说,应该要返回一个int。
纠结了一晚上这个问题,想找找其他人的面经里面对这道题的描述,也没有找到,所以这道题就让它随风吧。不如好好复习一下树的遍历。
想测试一下不如去leetcode刷一下这道题可能还比较有意义:Binary Tree Maximum Path Sum