“中兴捧月”比赛之——二叉查找树(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.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: ...
随机推荐
- 设备树API
引子 首先看一个例子,也可参考linux设备树语法中的gpio示例.该示例选自openwrt的gpio-button-hotblug驱动. 设备树code: gpio-keys-polled { co ...
- makefile编写---:= ?= += =的区别
在Makefile中我们经常看到 = := ?= +=这几个赋值运算符,那么他们有什么区别呢?我们来做个简单的实验 新建一个Makefile,内容为:ifdef DEFINE_VRE VRE = ...
- 004androidStudio ndk开发环境
004androidStudio ndk开发环境 android studio中编译C/C++源代码 1. 配置ndk.dir 在 local.properties 添加如下配置: sdk.dir=p ...
- 程序运行缺少MSVCR110.dll
Download Visual C++ Redistributable for Visual Studio 2012 Update 4 from Official Microsoft Download ...
- hdu 3394(点双连通)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3394 思路:题目的意思是要求无向图中的冲突边和不需要边的条数,如果一个块中有多个环,则该块中的每条边都 ...
- Laravel中创建控制器
<?php /** * Created by PhpStorm. * User: chuang * Date: 17-1-14 * Time: 下午4:29 */ namespace App\H ...
- SQL Server 2008中如何为XML字段建立索引
from:http://blog.csdn.net/tjvictor/article/details/4370771 SQL Server中的XML索引分为两类:主XML 索引和辅助XML索引.其中辅 ...
- boost::lockfree::stack
#include <boost/thread/thread.hpp> #include <boost/lockfree/stack.hpp> #include <iost ...
- 《从零开始学Swift》学习笔记(Day 45)——重写方法
原创文章,欢迎转载.转载请注明:关东升的博客 重写实例方法 在子类中重写从父类继承来的实例方法和静态方法.先介绍实例方法的重写. 下面看一个示例: class Person { var name: S ...
- 《从零开始学Swift》学习笔记(Day 41)——类的继承
原创文章,欢迎转载.转载请注明:关东升的博客 Swift中的继承只能发生在类上,不能发生在枚举和结构体上.一个类可以继承另一个类的方法.属性.下标等特征,当一个类继承其他类时,继承类叫子类,被继承类叫 ...