求教一道二叉树求某一个元素x在二叉树中的层次的题,求解释(程序在补充中) ,要求思路,越详细越好

论坛 期权论坛 期权     
xvqian988   2018-4-28 02:19   6107   1
int Xdepth(BiTNode *t,char x)// 查找某元素x在树中的层数
{
int num1,num2,n;
if(t==NULL)
  return 0;
else{
       if(t->data==x)
          return 1;  
  num1=Xdepth(t->lchild,x);
  num2=Xdepth(t->rchild,x);
  n=num1+num2;
  if(n...int Xdepth(BiTNode *t,char x)// 查找某元素x在树中的层数
{
int num1,num2,n;
if(t==NULL)
  return 0;
else{
       if(t->data==x)
          return 1;
  num1=Xdepth(t->lchild,x);
  num2=Xdepth(t->rchild,x);
  n=num1+num2;
  if(num1!=0||num2!=0)
   n++;
  return n;

}
}展开
分享到 :
0 人收藏

1 个回复

正序浏览
2#
sine882010  2级吧友 | 2018-4-30 01:12:54
你这个是使用递归实现查找元素x所处层数
x的值要么在二叉树中找不到,要么只能找到一个,换句话说你在设计整棵树的时候,每个节点的值都应该不同,这个函数才正确。
num1,num2分别记录在左子树,右子树中查找到x的层数
n记录最终返回的结果层数
if(t==NULL)   //判断节点是否为空,空则返回0,即没找到
  return 0;
else{
       if(t->data==x)//如果元素值等于x,则返回1.注意,这里的1是相对于以t为根节点的层数值。
          return 1;
  num1=Xdepth(t->lchild,x);//如果当前节点元素值不等于1,进入左子树进行查找,返回x所处的层数,当然此时的num1所代表的层数是相对以t的左节点为根的树的层数
  num2=Xdepth(t->rchild,x);//进入右子树进行查找,返回x所处的层数
  n=num1+num2;//由于在设计树的时候,就说了,每个节点的值不同。因此要么在左子树中找到(num1>0&&num2==0)要么在右子树中找到(num2>0&&num1==0)
              //因此这里可以改成n=num1>num2?num1:num2;应该也可以。
  if(num1!=0||num2!=0)//该条件表示找到了x元素
   n++;//这时n的值要加1,原因前面已经说过了。n的当前值只是相对于t的左子女或者右子女的层数值。

如果还有什么疑问,再探讨~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP