• 求二叉树中指定节点的深度


     1 package job.huawei;
     2 
     3 import java.util.Scanner;
     4 
     5 public class TreeHigh {
     6 
     7     /**
     8      * 输入字符串如a1b2c2d3e3f3g4构成一颗二叉树数字表示前一个字符所在的层,最多不超过9层
     9      * 求指定节点的深度
    10      */
    11     public static void main(String[] args) {
    12         // TODO Auto-generated method stub
    13         Scanner cin=new Scanner(System.in);
    14         String str=cin.next();
    15         String findChar=cin.next();
    16         cin.close();
    17         char tree[]=new char[512];
    18         createTree(str,tree);
    19         for(int i=0;i<findChar.length();i++){
    20             System.out.print(getNodeHigh(tree,str,findChar.charAt(i))+" ");
    21         }        
    22     }
    23     /**
    24      * 根据输入的字符串,顺序存储树
    25      * @param str
    26      * @param tree
    27      */
    28     public static void createTree(String str,char tree[]){
    29         int k=0,count=0,j=0;
    30         for(int i=1;i<str.length();i+=2){
    31             j=Integer.parseInt(String.valueOf(str.charAt(i)));//取某节点所在层
    32 
    33             if(i>1)
    34             {
    35                 count=str.charAt(i)!=str.charAt(i-2)?0:count+1;//判断是否在同一层,同一层则count+1,否则count=0
    36 
    37             }
    38             k=(int)Math.pow(2, j-1)+count;////计算节点的存储位置
    39 
    40             tree[k]=str.charAt(i-1);
    41         }
    42     }
    43     /**
    44      * 求指定节点在树中的深度
    45      * @param tree
    46      * @param str
    47      * @param x
    48      * @return
    49      */
    50     public static int getNodeHigh(char tree[],String str,char x) {
    51         int index=str.indexOf(String.valueOf(x));//判断该字符是否在树中,不在则直接返回
    52 
    53         if(index<0) return 0;
    54         
    55         int d=Integer.parseInt(String.valueOf(str.charAt(index+1))),level=0;//获取节点所在层次   
    56         
    57         while(2*d<tree.length&&tree[2*d]!=tree[0]){
    58             level++;
    59             d=2*d;
    60         }
    61         return level+1;
    62     }
    63 }
  • 相关阅读:
    Windows下的符号链接
    简单谈谈存储器的容量缩水问题
    配置CKEditor和CKFinder
    CKFinder的水印控件的问题
    关于 Visual Studio 默认创建的不是公共类
    Symbian 60 按键以及对应的键值(图)
    PLC中存储器的数据类型与寻址方式
    S7200 寻址
    电工识图笔记
    S7200型号串口通信参数设置
  • 原文地址:https://www.cnblogs.com/cloudml/p/4377326.html
Copyright © 2020-2023  润新知