统计完全二叉树的节点数

来源:互联网 发布:java知识地图软件 编辑:程序博客网 时间:2024/05/01 20:12

//统计完全二叉树的节点数public class NumOfTreeNode{  //二叉树节点的定义public static class Node{public int value;public Node left;public Node right;public Node(int data){this.value=data;}}    //统计完全二叉树节点的数量    public static int NodeNum(Node head){          if(head==null)     {     return 0;     }     return bs(head,1,mostLeftLevel(head,1));    }        public static int bs(Node node,int l ,int h){       if(l==h)       {       return 1;       }       if (mostLeftLevel(node.right, l + 1) == h) {return (1 << (h - l)) + bs(node.right, l + 1, h);} else {return (1 << (h - l - 1)) + bs(node.left, l + 1, h);}    }   public static int mostLeftLevel(Node node ,int level){          while(node!=null)     {     level++;     node=node.left;     }     return level-1;   }public static void main(String[]args){    /*构造的二叉树             1                2         3            4      5     6*/          Node head=new Node(1);          head.left=new Node(2);          head.right=new Node(3);          head.left.left=new Node(4);          head.left.right=new Node(5);          head.right.left=new Node(6);          System.out.println(NodeNum(head));}}


原创粉丝点击