POJ 2309 BST 【位运算】
题意: 给你一个二叉树,如图:
给你一个节点,输出以这个节点为根的最小值和最大值。
分析: 经观察可以发现,叶子节点是连续的的奇数,所以只要找到所给节点的数的区间上最小奇数和最大奇数即可。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> int main() { int t,n,min,max,lowbit; scanf("%d",&t); while(t--) { scanf("%d",&n); lowbit=(n)&(-n); // 取最后一个 1 min=n-(lowbit-1); // 取得个该区间上的最小奇数。 max=n|(n-1); // 把最后面连续的0 变成 1 printf("%d %d\n",min,max); } return 0; }