校招编程题(三) 二叉树问题之求子节点的最近公共父节点

摘要

对某一满二叉排序树,输入四个数字。第1个为树的高度,后面3个为节点标号。求此三个节点的最近公共父节点。


import java.util.Scanner;

/************************************
**                                 
**  @Description 对某一满二叉排序树,输入四个数字。
**               第1个为树的高度,后面3个为节点标号。求此三个节点的最大公共父节点                         
**                                 
**  @author      何明胜                              
**                                
**  @Date 2017-04-03  22:13:26     
**                                
**  @Copyright Copyright (c) 2017  
**                                 
************************************/

public class InTraToLastestParent {
    int k;//二叉树的高度
    int []arr = new int[3];//获取的三个节点

    public void init(){
        Scanner scanner = new Scanner(System.in);

        //读取数据
        k=scanner.nextInt();
        for(int i=0;i<3;i++){
            arr[i] = scanner.nextInt();
        }
        //开始寻找
        find(Math.pow(2, k-1), k-1);
    }

    /*
     * 寻找函数
     * 1.从根结点开始,判断当前是哪个节点是否同时大于或者小于此节点
     * 2.若同时大于,则当前根节点的右子节点复制为当前根节点,继续第1步
     * 3.若同时小于,则当前根节点的左子节点赋值为当前根节点,继续第1步
     * 4.若不满足上述两个条件,表明此节点为三个节点的最大公共父节点,输出此节点的值 
    */
    public void find(double value,int k){
        if(arr[0] >= value && arr[1] >= value && arr[2] >= value){
            find(value+Math.pow(2, k-1), k-1);
        }
        else if(arr[0] <= value && arr[1] <= value && arr[2] <= value){
            find(value-Math.pow(2,k-1), k-1);
        }
        else{
            System.out.println((int)value);
        }   
    }

    public static void main(String []args){
        InTraToLastestParent inTraToLastestParent = new InTraToLastestParent();//初始化
        inTraToLastestParent.init();//执行函数
    }
}

你可能感兴趣的:(校招编程题)