“中兴捧月”比赛之——二叉查找树(BST)树的最短路径Java求解
问题描述:
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求解的更多相关文章
- 【C/C++】小红的字符串 / 中兴捧月
考试的时候想复杂了,其实直接一边写放进set里去重就可以了 很有意思 自己的理解就是cpp的map+set或者就是set可以完成大多数java的hashset操作 链接:https://ac.nowc ...
- BST树
http://www.cnblogs.com/bizhu/archive/2012/08/19/2646328.html 4. 二叉查找树(BST) Technorati 标记: 二叉查找树,BST, ...
- BST树,B树、B-树、B+树、B*树
BST树,B树.B-树.B+树.B*树 二叉搜索树(BST): 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树 ...
- 二叉查找树(BST)的实现
一.二叉树介绍 二叉查找树(Binary Search Tree,BST),又称二叉排序树,也称二叉搜索树,它或者是一颗空树,或者具有如下性质的树:若它的左子树不为空,则左子树上所有节点的值都小于根节 ...
- 查找系列合集-二叉查找树BST
一. 二叉树 1. 什么是二叉树? 在计算机科学中,二叉树是每个结点最多有两个子树的树结构. 通常子树被称作“左子树”(left subtree)和“右子树”(right subtree). 二叉树常 ...
- 二叉查找树BST 模板
二叉查找树BST 就是二叉搜索树 二叉排序树. 就是满足 左儿子<父节点<右儿子 的一颗树,插入和查询复杂度最好情况都是logN的,写起来很简单. 根据BST的性质可以很好的解决这些东 ...
- 二叉查找树(BST)
二叉查找树(BST):使用中序遍历可以得到一个有序的序列
- BST树、B树、B+树、B*树
1. BST树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: ...
- BST树、B-树、B+树、B*树
BST树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: ...
随机推荐
- openWRT自学---对官方的开发指导文档的解读和理解 记录3:一些常用方法
1.约定 configuration files follow the convention: <name>.conf init files follow the convention: ...
- Web前端都学点儿啥?
Web开发如今是如日中天,热的发烫.但是Web开发相关的技术和知识却像N座大山一样,耸立在我们面前,连绵起伏,漫无边际.那么这些山头那些我们应该占领,那些我们应该绕开,很多人看着就蒙了,这不光是初学者 ...
- jq serialize 系列化 乱码 解决办法
query = form.find('input,select,textarea').serialize(); $.post(target,decodeURIComponent(query)).suc ...
- Android仿QQ复制昵称效果2
本文同步自http://javaexception.com/archives/77 背景: 在上一篇文章中,给出了一种复制QQ效果的方案,今天就来讲讲换一种方式实现.主要依赖的是一个开源项目https ...
- 什么是 HTTPS
HTTPS (基于安全套接字层的超文本传输协议 或者是 HTTP over SSL) 是一个 Netscape 开发的 Web 协议. 你也可以说:HTTPS = HTTP + SSL HTTPS 在 ...
- Mustache(3)
一.简单示例 代码: 1 function show(t) { 2 $("#content").html(t); 3 } 4 5 var view = { 6 title: 'YZ ...
- WPF TextBox 验证输入
//验证输入为数字private void txt_time_KeyDown(object sender, KeyEventArgs e){ if (!((e.Key >= Key.D0 &am ...
- UVA 10319 - Manhattan(2-SET)
UVA 10319 - Manhattan 题目链接 题意:一个城市,有南北和东西街道.每种街道都是单行道,如今给定几个起点和终点.要求起点和终点必须最多转一次弯能够到达,问能否够满足全部的起点终点 ...
- (三)Solrj4到Solrj5的升级之路
(三)Solrj4到Solrj5的升级之路 Solr5发布了,带来了许多激动人心的新特性,但Solrj的许多接口也发生了变化,升级是痛苦的,但也是必须的,下面就赶紧来看看有哪些代码需要升级吧. 变化1 ...
- 巨蟒python全栈开发linux之centos4
1.linux虚拟环境1-4 2.linux运行crm代码