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

问题描述:

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

测试用例一:  10

      5  20

  返回15;

测试用例二:   100

    20  70  110  120

  10  null null 89 null null null null

  返回130;

程序代码实现:

  

  1 package examination.written;
  2
  3 /**
  4  *
  5  * @author ZhuXY
  6  * @time   2016-6-12 下午9:57:53
  7  *
  8  */
  9 public class BSTMinLength {
 10
 11     public static void main(String[] args) {
 12
 13         /*
 14          * root:            tNodeRoot
 15          * one layer: tNode21            tNode22
 16          * two layer:tNode11 tNode12 tNode13 tNode14
 17          */
 18
 19         //构造一个BST树
 20         TreeNode tNode11 = new TreeNode(10, null, null);
 21         TreeNode tNode12 = new TreeNode(50, null, null);
 22         TreeNode tNode13 = new TreeNode(5, null, null);
 23         TreeNode tNode14 = new TreeNode(30, null, null);
 24
 25         TreeNode tNode21 = new TreeNode(30, tNode11, tNode12);
 26         TreeNode tNode22 = new TreeNode(30, tNode13, tNode14);
 27
 28         TreeNode tNodeRoot = new TreeNode(100, tNode21, tNode22);
 29
 30         System.out.println(minlength(tNodeRoot));
 31
 32     }
 33
 34     /**
 35      * 获取BST树的最短路径
 36      * @param tNode
 37      * @return minLength:BST最短路径
 38      */
 39     private static int minlength(TreeNode tNode) {
 40         // TODO Auto-generated method stub
 41         if (tNode != null) {
 42             return getlength(tNode,0);
 43         }
 44         return -1;
 45     }
 46
 47     /**
 48      * 递归获取非空根节点到叶子节点的最短路径
 49      * @param tNode
 50      * @param curLength
 51      * @return minLeft>minRight? minRight:minLeft
 52      */
 53     private static int getlength(TreeNode tNode,int curLength) {
 54         // TODO Auto-generated method stub
 55         int minLeft=-1;
 56         int minRight=-1;
 57
 58         // 左子树
 59         if (tNode.leftNode!=null){
 60             minLeft=getlength(tNode.leftNode, curLength+tNode.value);
 61         }
 62
 63         // 右子树
 64         if (tNode.rightNode!=null) {
 65             minRight=getlength(tNode.rightNode, curLength+tNode.value);
 66         }
 67
 68         // 叶子节点
 69         if (tNode.leftNode==null && tNode.rightNode==null) {
 70             return curLength+tNode.value;
 71         }
 72
 73         // 如果左子树为空
 74         if (tNode.leftNode==null) {
 75             return minRight;
 76         }
 77
 78         // 如果右子树为空
 79         if (tNode.rightNode==null) {
 80             return minLeft;
 81         }
 82
 83         // 如果右子树和左子树都不为空
 84         return minLeft>minRight? minRight:minLeft;
 85     }
 86 }
 87
 88 /**
 89  * 定义BST树结构类型
 90  * @author ZhuXY
 91  *
 92  */
 93 class TreeNode {
 94     int value;
 95     TreeNode leftNode;
 96     TreeNode rightNode;
 97
 98     TreeNode(int value, TreeNode lefeNode, TreeNode rightNode) {
 99         this.value = value;
100         this.leftNode = lefeNode;
101         this.rightNode = rightNode;
102     }
103 }

时间: 2024-12-22 21:36:29

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

中兴捧月杯 数字配对

一.标题: 数字化婚姻配对尝试 二.题目: 建立一个模型,来模拟推导社会男女择偶过程. 为了模型简化,一个人的特性指标有三个,这里假设为财富.样貌.品格,每个指标均可取值1-100之间任意数字.同样也对这3项指标有自己的需求.这3个需求值取值范围都在1-98间,当然三者的和必须为100.所以任意一个人可以用以下数组来表述: G(A.B.C.A1.B1.C1)G代表男,M代表女. 举例G11(80.50.40.10.30.60),表示男11号,拥有财富80.样貌50.品格40,对异性品格的偏好为:

二叉查找树(BST树)

二叉查找树的特点: 在二叉查找树中左子树上所有结点的数据都小于等于根结点的数据,而右子树上所有结点的数据都大于根结点的数据 1 //存储结构: 2 struct node 3 { 4 Int data; 5 node *lchild; 6 node *rchild; 7 }; 8 9 //在建树前根节点不存在: 10 Node *root = NULL; 11 12 //新建结点: 13 node *newNode(int v) 14 { 15 node *Node = new node; 16

中兴捧月蓝剑之路初赛

这个比赛很早就开始宣传了,但是宣传力度貌似没有华为软件精英挑战赛那么大,后来我就把这事忘了,也没准备,昨天收到短信才想起来,晚上看了看官方给的两道模拟题,因为模拟测试凌晨12点就截至了,也没来得急做.模拟测试一共两道题,一道字母接龙,一道完整数判断,今天白天把两道题做了一遍,说不上多难,但想把边界条件和极端输入考虑周全也需要不少时间.晚上吃完饭玩了会儿手机上了趟厕所,7点40左右开始准备参赛,然后就是各种进不去,过程我就不吐槽了,总之很幸运的在截至时间晚8点前进去了,然后就深吸一口气开始答,第一

中兴捧月蓝剑之路初赛题目——数房子

题目回忆:航拍一块矩形空地的俯视图,用数字0或1分别表示某位置看到的是空地还是屋顶,相邻的屋顶属于同一栋房子,位于对角线上的屋顶不属于同一栋房子(这也符合实际),现在先输入空地的大小,再输入矩形俯视图的布局,要求我们输出这块矩形空地中有多少栋房子 测试用例: TestCase 1: Input: 5    5 0    1    0    0    0 0    0    1    1    0 0    0    0    1    0 0    0    0    0    0 0    0

中兴捧月算法精英挑战赛-迪杰斯特拉派

赛题为: 最强大脑中的收官蜂巢迷宫变态级挑战,相信大家都叹为观止!最强大脑收官战打响后,收视率节节攀升,就连蚁后也不时出题难为一下她的子民们.在动物世界中,称得上活地图的,除了蜜蜂,蚂蚁当仁不让.在复杂多变的蚁巢中, 蚂蚁总是能以最快.最高效的方式游历在各个储藏间(存储食物).今天,她看完最新一期节目,又发布了一项新任务:小蚁同学,我需要玉米库的玉米,再要配点水果,去帮我找来吧.小蚁正准备出发,蚁后又说:哎呀,回来,我还没说完呢,还有若干要求如下: 1.小蚁同学,你需要尽可能以最少的花费拿到食物

二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree)的比较

http://www.iteye.com/topic/614070 此少侠总结的特棒,直接收藏了. 我们这个专题介绍的动态查找树主要有: 二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree).这四种树都具备下面几个优势: (1) 都是动态结构.在删除,插入操作的时候,都不需要彻底重建原始的索引树.最多就是执行一定量的旋转,变色操作来有限的改变树的形态.而这些操作所付出的代价都远远小于重建一棵树.这一优势在<查找结构专题(1):静态查找结构概论 >中讲到

二叉查找树BST 模板

二叉查找树BST 就是二叉搜索树 二叉排序树. 就是满足 左儿子<父节点<右儿子 的一颗树,插入和查询复杂度最好情况都是logN的,写起来很简单. 根据BST的性质可以很好的解决这些东西 1.查询值 int Search(int k,int x) { if(x<a[k].key && a[k].l) Search(a[k].l,x); else if(x>a[k].key && a[k].r) Search(a[k].r,x); else retur

BST树

http://www.cnblogs.com/bizhu/archive/2012/08/19/2646328.html 4. 二叉查找树(BST) Technorati 标记: 二叉查找树,BST,二叉查找树合并 4.1 BST数据结构定义 使用C++语言,如果需要使用BST,那么不用重新造轮子了,C++语言里的map, set等STL容器应该可以满足需求了(虽然STL里这些容器大多是以红黑树作为其底层实现),如果你需要使用小/大根堆(也叫优先队列,特殊的.自平衡的BST),STL也能满足你的

详解二叉查找树(BST)

详解二叉查找树(BST) 本篇随笔简单讲解一下数据结构--二叉查找树(\(Binary\,\,Sort\,\,Tree,BST\)),(后文的"二叉查找树"一词均用\(BST\)代替). BST的概念 首先,\(BST\)是一棵二叉树. 它的定义是,根节点左子树全部严格小于根节点,右子树大于等于根节点,并且,左右子树都是\(BST\). 很好理解,很明朗很简单的定义. 可以看出,这是一个通过递归方式定义的数据结构,所以,它的诸多操作自然要用到递归. BST的功能 我们可以看出来,这个二