二叉树:Node类有方法:
Node getLeftChild()
Node getRightChild()
int  getLeafNumber()
int  getDepth() (叶子深度是1,向上依次加1)
boolean isleaf()Tree类有方法:
Node getParent()
Node getRoot()想得到某个节点左面的所有叶子数目。(比如5叶子的一棵树,第四个叶子左面叶子数目就是3,第四个叶子的父节点左面叶子数目也是3)求可用的逻辑?谢谢啦

解决方案 »

  1.   

    答:这个逻辑简单啊.
    伪代码如下:private static int total=0;//某个节点左面的所有叶子数目
    static void leftLeaf(Node root,Node someNode)
    //在树根root表示的二叉树中统计结点someNode左面的所有叶子数目
    {
     if( root==null ) return;
     leftLeaf(root.getLeftChild() );//统计左边叶子数目
     if( root.isleaf()  &&  root != someNode ) total++;//找到一个左边叶子
     if(root == someNode ) return;//从someNode结点开始,下边就不再统计了
     //否则:还没有统计到someNode
     leftLeaf(root.getRightChild());//统计someNode结点的左边结点root其它的叶子数目
      

  2.   

    答:小误.
    将:leftLeaf(root.getLeftChild() );改为:
    leftLeaf(root.getLeftChild(),someNode  );

    leftLeaf(root.getRightChild());改为:
    leftLeaf(root.getRightChild() ,someNode );
    最终代码:伪代码如下: private static int total=0;//某个节点左面的所有叶子数目 
    static void leftLeaf(Node root,Node someNode) 
    //在树根root表示的二叉树中统计结点someNode左面的所有叶子数目 

    if( root==null ) return; 
    leftLeaf(root.getLeftChild() ,someNode );//统计左边叶子数目 
    if( root.isleaf()  &&  root != someNode ) total++;//找到一个左边叶子 
    if(root == someNode ) return;//从someNode结点开始,下边就不再统计了 
    //否则:还没有统计到someNode 
    leftLeaf(root.getRightChild() ,someNode );//统计someNode结点的左边结点root其它的叶子数目