`

poj 2788(二叉树)

poj 
阅读更多
总时间限制:
3000ms
内存限制:
65536kB
描述


如上图所示,由正整数1,2,3……组成了一颗二叉树。我们已知这个二叉树的最后一个结点是n。现在的问题是,结点m所在的子树中一共包括多少个结点。

比如,n = 12,m = 3那么上图中的结点13,14,15以及后面的结点都是不存在的,结点m所在子树中包括的结点有3,6,7,12,因此结点m的所在子树中共有4个结点。
输入
输入数据包括多行,每行给出一组测试数据,包括两个整数m,n (1 <= m <= n <= 1000000000)。最后一组测试数据中包括两个0,表示输入的结束,这组数据不用处理。
输出
对于每一组测试数据,输出一行,该行包含一个整数,给出结点m所在子树中包括的结点的数目。
样例输入
3 12
0 0
样例输出
4
解法:
我认为本题最关键的是找到节点之间的关系;
就m和n和节点之间的关系:以m为根节点,m,n在同一棵树上,或者不在同一棵树上.
另外我们可以知道每一棵完全二叉树的节点总数 = 2的二叉树的深度次方 - 1 ;
所以题意理解了,自然而然就解决了
Java
package dsa;

import java.util.Scanner;

/**
 * 二叉树
 * @author tanlvxu
 *
 */
public class Demo19 {
    int a[] = new int[33] ;
	public static void main(String[] args) {
		
     new Demo19().test() ;
	}
	/**
	 * 把2的i次方存在a[i]中
	 */
	public void Init()
	{   int i ;
	   for(i=2,a[0]=0,a[1]=1;i<33;i++)
	   {
		   a[i] = a[i-1]*2 ;
	   }
	}
	
    public void test()
    {
    	Scanner sc = new Scanner(System.in) ;
    	int m,n,p,h;
    	m = sc.nextInt() ;
    	n = sc.nextInt() ;
    	while(m!=0)
    	{ 
    		Init();
    		p = m ;
    		h = 1;
    	//计算从m到n层的深度
    		while(p<=n)
    		{
    			p *= 2 ;
    			h++ ;
    		}
    		p /= 2 ;
    		h-- ;
    		//当m,n不在同一棵树上
    		if(p+a[h]-1<n) System.out.println(a[h+1] - 1)  ;
    		//当m,n在同一棵树上
    		else System.out.println(a[h] + n - p)  ;
    		m = sc.nextInt() ;
        	n = sc.nextInt() ;
    	}
    }
}
 
分享到:
评论

相关推荐

    poj 2418 二叉树

    二叉树的应用,二叉树的应用,二叉树的应用,

    数算POJ二叉树作业

    数算的二叉树的POJ作业,分别有:二叉树1_二叉树的操作;二叉树2_文本二叉树;二叉树3_由中根序列和后根序列重建二叉树;二叉树4_表达式.表达式树.表达式求值;二叉树5_Huffman编码树;二叉树6_二叉搜索树;二叉树7_...

    poj训练计划.doc

    - 树:如二叉树和AVL树,用于存储和检索有序数据,如`poj2513`。 - **简单搜索** - 深度优先搜索:如`poj2488, poj3083`。 - 广度优先搜索:如`poj3278, poj1426`。 - **动态规划** - 背包问题:如`poj1837, ...

    acm训练计划(poj的题)

    - (poj2388, poj2299):介绍二叉树、平衡二叉树等。 3. **字符串处理**: - (poj3349, poj3274, POJ2151, poj1840, poj2002, poj2503):字符串操作算法,如哈希函数的使用、模式匹配算法等。 4. **集合和映射**...

    poj 百练 题目分类

    在 POJ 百练 题目分类中,递归类题目包括菲波那契数列(2753)、二叉树(2756)、逆波兰表达式(2694)、放苹果(1664)、红与黑(2816)、八皇后问题(2754)、木棍问题(2817)、城堡(2815)、分解因数(2749)、...

    北大POJ经典结题报告

    报告可能会讲解链表、数组、栈、队列、树(二叉树、平衡树如AVL和红黑树)、哈希表等数据结构的特点和应用场景。 3. **复杂度分析**:为了确保算法的效率,报告会深入分析每种算法的时间复杂度和空间复杂度,教授...

    POJ 我收集的解题报告(100多道)

    2. **数据结构**:链表、栈、队列、堆、哈希表、树(如二叉树、平衡树、B树、Trie树等)和图。 3. **动态规划**:理解状态转移方程,解决具有重叠子问题和最优子结构的问题。 4. **贪心算法**:在每一步选择局部最...

    POJ题目及答案

    例如,数据结构部分可能包括链表、栈、队列、树、图等经典结构的运用,如二叉树的遍历、图的深度优先搜索和广度优先搜索等;在图论方面,可能会遇到最小生成树、最短路径等问题;动态规划则常用于解决背包问题、最长...

    强大的poj分类

    常见的数据结构有数组、链表、栈、队列、哈希表、树(二叉树、红黑树等)、图等。 **重要性**:数据结构是解决复杂问题的关键。合理选择数据结构可以显著提高算法的效率,减少内存占用。 **示例题目**: - POJ ...

    POJ1836-Alignment

    5. **数据结构**:二叉堆、平衡二叉树(如AVL或红黑树)等数据结构可能会在实现O(nlogn)算法中起到关键作用,用于存储和查找元素。 6. **测试用例设计**:解题报告中还会包括如何构造测试用例以确保代码的正确性,...

    ACM-POJ 算法训练指南

    1. **树和二叉树**:树和二叉树的基本操作和应用(poj1035, poj3080, poj1936)。 2. **堆**:堆排序及其在优先队列中的应用(poj2388, poj2299)。 3. **哈希表**:用于快速查找和存储,如Hash函数的设计(poj3349,...

    poj大量习题详解ACM

    2. **数据结构**:链表、栈、队列、树(二叉树、平衡二叉树、红黑树等)、图、哈希表、堆、优先队列等。 3. **数学知识**:组合数学、数论(模运算、同余方程、最大公约数与最小公倍数、质因数分解等)、概率统计、...

    poj acm300题 c++源码打包

    3. **数据结构**:链表、栈、队列、树(二叉树、平衡树、B树、Trie树等)、图、哈希表、堆等。 4. **数学知识**:组合数学、数论、线性代数、概率统计等在解题中的应用。 5. **字符串处理**:KMP算法、Boyer-Moore...

    poj习题答案

    2. **数据结构**:链表、数组、栈、队列、树(二叉树、平衡树、堆)、图等。 3. **字符串处理**:KMP算法、Rabin-Karp算法、Manacher's Algorithm等。 4. **数学应用**:模运算、数论、组合数学、图论等。 5. **...

    大顶堆应用:POJ2010

    大顶堆是一种特殊的完全二叉树,其每个节点的值都大于或等于其子节点的值,常用于实现优先队列,快速找到最大元素,或者进行高效的排序算法,如堆排序。 在编程竞赛中,大顶堆经常被用来解决时间复杂度要求较高的...

    poj-problem.rar_poj

    例如,二叉树、队列、堆、栈、图等数据结构在POJ问题中有着广泛的应用。 4. **复杂度分析**:理解并估算算法的时间复杂度和空间复杂度,是保证程序在限定时间内完成的关键。报告会详细计算并解释算法的复杂度,以便...

    pku1151.rar_Atlantis_pku 11_poj Atlant_poj Atlantis_poj11

    线段树的基本概念是将一维数组划分为多个子区间,并将这些子区间对应到一棵二叉树的节点。每个节点代表一个区间,叶节点对应原始数组的元素,非叶节点则表示其子节点对应的区间的合并值。通过这样的结构,可以快速地...

    北大POJ初级-基本算法

    9. **数据结构**:如数组、链表、栈、队列、树(二叉树、平衡树如AVL和红黑树)、图等,是实现算法的基础。 10. **数学基础**:如模运算、质数判断、快速幂、中国剩余定理等,这些在解决算法问题时经常用到。 通过...

    POJ100题_C++_源码

    10. T062.cpp - 可能是树形结构问题,如二叉树或树的遍历,C++的递归和指针操作是基础。 通过分析和学习这些源码,开发者不仅可以提升C++编程技巧,还能加深对算法的理解,对于参加ACM/ICPC等编程竞赛或者提高软件...

    POJ 300多题AC代码

    1472可能是关于数据结构(如二叉树或图)的问题,要求编写代码来处理特定的查询或操作。 1331可能涉及到动态规划,需要找出最优策略以解决某种分配或组合问题。 2472可能涉及字符串处理或模式匹配,需要实现高效的...

Global site tag (gtag.js) - Google Analytics