问题描述:

BST树,又称二叉查找树,求其到所有叶子节点路径的最小值

测试用例一:  10

      5  20

  返回15;

测试用例二:   100

    20  70  110  120

  10  null null 89 null null null null

  返回130;

程序代码实现:

  

 package examination.written;

 /**
*
* @author ZhuXY
* @time 2016-6-12 下午9:57:53
*
*/
public class BSTMinLength { public static void main(String[] args) { /*
* root: tNodeRoot
* one layer: tNode21 tNode22
* two layer:tNode11 tNode12 tNode13 tNode14
*/ //构造一个BST树
TreeNode tNode11 = new TreeNode(10, null, null);
TreeNode tNode12 = new TreeNode(50, null, null);
TreeNode tNode13 = new TreeNode(5, null, null);
TreeNode tNode14 = new TreeNode(30, null, null); TreeNode tNode21 = new TreeNode(30, tNode11, tNode12);
TreeNode tNode22 = new TreeNode(30, tNode13, tNode14); TreeNode tNodeRoot = new TreeNode(100, tNode21, tNode22); System.out.println(minlength(tNodeRoot)); } /**
* 获取BST树的最短路径
* @param tNode
* @return minLength:BST最短路径
*/
private static int minlength(TreeNode tNode) {
// TODO Auto-generated method stub
if (tNode != null) {
return getlength(tNode,0);
}
return -1;
} /**
* 递归获取非空根节点到叶子节点的最短路径
* @param tNode
* @param curLength
* @return minLeft>minRight? minRight:minLeft
*/
private static int getlength(TreeNode tNode,int curLength) {
// TODO Auto-generated method stub
int minLeft=-1;
int minRight=-1; // 左子树
if (tNode.leftNode!=null){
minLeft=getlength(tNode.leftNode, curLength+tNode.value);
} // 右子树
if (tNode.rightNode!=null) {
minRight=getlength(tNode.rightNode, curLength+tNode.value);
} // 叶子节点
if (tNode.leftNode==null && tNode.rightNode==null) {
return curLength+tNode.value;
} // 如果左子树为空
if (tNode.leftNode==null) {
return minRight;
} // 如果右子树为空
if (tNode.rightNode==null) {
return minLeft;
} // 如果右子树和左子树都不为空
return minLeft>minRight? minRight:minLeft;
}
} /**
* 定义BST树结构类型
* @author ZhuXY
*
*/
class TreeNode {
int value;
TreeNode leftNode;
TreeNode rightNode; TreeNode(int value, TreeNode lefeNode, TreeNode rightNode) {
this.value = value;
this.leftNode = lefeNode;
this.rightNode = rightNode;
}
}

“中兴捧月”比赛之——二叉查找树(BST)树的最短路径Java求解的更多相关文章

  1. 【C/C++】小红的字符串 / 中兴捧月

    考试的时候想复杂了,其实直接一边写放进set里去重就可以了 很有意思 自己的理解就是cpp的map+set或者就是set可以完成大多数java的hashset操作 链接:https://ac.nowc ...

  2. BST树

    http://www.cnblogs.com/bizhu/archive/2012/08/19/2646328.html 4. 二叉查找树(BST) Technorati 标记: 二叉查找树,BST, ...

  3. BST树,B树、B-树、B+树、B*树

    BST树,B树.B-树.B+树.B*树 二叉搜索树(BST): 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树 ...

  4. 二叉查找树(BST)的实现

    一.二叉树介绍 二叉查找树(Binary Search Tree,BST),又称二叉排序树,也称二叉搜索树,它或者是一颗空树,或者具有如下性质的树:若它的左子树不为空,则左子树上所有节点的值都小于根节 ...

  5. 查找系列合集-二叉查找树BST

    一. 二叉树 1. 什么是二叉树? 在计算机科学中,二叉树是每个结点最多有两个子树的树结构. 通常子树被称作“左子树”(left subtree)和“右子树”(right subtree). 二叉树常 ...

  6. 二叉查找树BST 模板

    二叉查找树BST 就是二叉搜索树 二叉排序树. 就是满足 左儿子<父节点<右儿子 的一颗树,插入和查询复杂度最好情况都是logN的,写起来很简单.   根据BST的性质可以很好的解决这些东 ...

  7. 二叉查找树(BST)

    二叉查找树(BST):使用中序遍历可以得到一个有序的序列

  8. BST树、B树、B+树、B*树

    1. BST树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: ...

  9. BST树、B-树、B+树、B*树

    BST树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: ...

随机推荐

  1. ChemDraw是这样预测诺氟沙星NMR谱

    化学绘图软件ChemDraw是一款在生化领域都可以使用的软件,诺氟沙星是一款常用的肠炎药,是生物化学领域的常见研究对象,在研究过程中需要预测它的NMR谱.这个时候如果用最新的ChemOffice 15 ...

  2. Javadoc生成html帮助文档

    注意事项: 右键项目 -> Export -> Java -> JavaDoc -> 选定Public表示录入所有的源文件,其他的可想而知    按步骤走下去最后Finish时 ...

  3. boost::lockfree::spsc_queue

    #include <boost/thread/thread.hpp> #include <boost/lockfree/spsc_queue.hpp> #include < ...

  4. CodeIgniter框架——表单辅助函数总结

    首先第一步就是载入辅助函数: $this->load->helper('form'); 函数解析: 1.form_open() 创建一个开始form标签,相对于你的配置文档中的基础URL. ...

  5. Python 文件操作、异常

    windows默认是gbk编码,又称cp936,汉字占2个字节. utf-8被称为万国码,这个编码下,汉字占3个字节. ASCII也是一种编码. 一.文件操作 最基本的文件打开: f = open(& ...

  6. 【BZOJ4849】[Neerc2016]Mole Tunnels 模拟费用流

    [BZOJ4849][Neerc2016]Mole Tunnels Description 鼹鼠们在底下开凿了n个洞,由n-1条隧道连接,对于任意的i>1,第i个洞都会和第i/2(取下整)个洞间 ...

  7. javascript获取客户端默认打印机

    JS <script language="javascript"> function startRequest() { var oShell = new ActiveX ...

  8. JS复制粘贴解决方案

    var clipboardData = window.clipboardData; //for IE if (!clipboardData) { // for chrome window.prompt ...

  9. JSON工具类库: alibaba/fastjson 使用记录

    JSON工具类库: alibaba/fastjson 使用记录 一.了解JSON JSON标准规范中文文档: http://www.json.org/json-zh.html 最佳实践:http:// ...

  10. Python中MRO

    MRO(方法解析顺序) 当有多重继承时,基于“从左到右,深度优先原则”: class CommonBase(): def Method(self): print('CommonBase') class ...