(二叉树) 如何求二叉树任意节点左侧叶子的数目?(急)(方法和类给出) 二叉树:Node类有方法:Node getLeftChild()Node getRightChild()int getLeafNumber()int getDepth() (叶子深度是1,向上依次加1)boolean isleaf()Tree类有方法:Node getParent()Node getRoot()想得到某个节点左面的所有叶子数目。(比如5叶子的一棵树,第四个叶子左面叶子数目就是3,第四个叶子的父节点左面叶子数目也是3)求可用的逻辑?谢谢啦 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 答:这个逻辑简单啊.伪代码如下: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其它的叶子数目} 答:小误.将: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其它的叶子数目 } 关于数组? j2sdk 1.3教学软件 C#好还是java好? 电子邮件中关于mime的问题 Java Applet 在网页中刷新后产生的问题(100) 这个怎么回事? 高分求助:JAVA学习资料!哪里有下载?100分!! 请问,J2SE与J2EE到底有多少差别。 在applet中的URL问题 String跟StringBUilder的相互转换 求助数独解算器问题——我的回溯法问题到底出在哪了? poi能读写大于100m的文件的么
伪代码如下: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其它的叶子数目
}
将: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其它的叶子数目
}