typedef struct BitNode  
{  
    char value;  
    BitNode *lchild,*rchild;    
}BitNode,*BiTree;

void CreatTree(BitNode* &root,char *pre,int l1,int r1,char *in,int l2,int r2)  ;

/*   *&代表什么?  //https://zhidao.baidu.com/question/2266744263935050308.html

这是C++的语法写法,&在形参中表示“引用”实参,
LNode * &lst ;  中LNode * 是个整体,表示变量类型是LNode类指针, &lst中的&表明引用实参,即代表实参的一个别名。   
标准C是不支持这种写法的。

追问

&不是取地址符吗? 引用参数是什么意思

追答

&在变量定义区,表示引用,要注意它的用法,
&在变量操作区,表示取地址符,如:

int x=10, *p=&x ;  //这里&作用在x上, 是取地址符
int &x  ;   //引用是C++引入的一个新特性,你要学的不是C++,则上述代码你是搞不懂的。 这里的&就表示引用。 一般这种形式会在形参中出现。

LNode * &lst ;  中LNode * 是个整体,表示变量类型是LNode类指针, &lst中的&表明引用实参,即代表实参的一个别名。 操作引用变量就相当于操作实参变量

*/

利用前序和中序求二叉树(源代码):

    1.  
      #include <iostream>
    2.  
      #include <cstdio>
    3.  
      #include <cstdlib>
    4.  
      #include <cstring>
    5.  
      using namespace std;;
    6.  
       
    7.  
      const int N=31;
    8.  
       
    9.  
       
    10.  
       
    11.  
      typedef struct BitNode
    12.  
      {
    13.  
      char value;
    14.  
      BitNode *lchild,*rchild;
    15.  
      }BitNode,*BiTree;
    16.  
       
    17.  
      /* *&代表什么?
    18.  
       
    19.  
      这是C++的语法写法,&在形参中表示“引用”实参,
    20.  
      LNode * &lst ; 中LNode * 是个整体,表示变量类型是LNode类指针, &lst中的&表明引用实参,即代表实参的一个别名。
    21.  
      标准C是不支持这种写法的。
    22.  
       
    23.  
      追问
    24.  
       
    25.  
      &不是取地址符吗? 引用参数是什么意思
    26.  
       
    27.  
      追答
    28.  
       
    29.  
      &在变量定义区,表示引用,要注意它的用法,
    30.  
      &在变量操作区,表示取地址符,如:
    31.  
       
    32.  
      int x=10, *p=&x ; //这里&作用在x上, 是取地址符
    33.  
      int &x ; //引用是C++引入的一个新特性,你要学的不是C++,则上述代码你是搞不懂的。 这里的&就表示引用。 一般这种形式会在形参中出现。
    34.  
       
    35.  
      LNode * &lst ; 中LNode * 是个整体,表示变量类型是LNode类指针, &lst中的&表明引用实参,即代表实参的一个别名。 操作引用变量就相当于操作实参变量
    36.  
       
    37.  
       
    38.  
       
    39.  
      */
    40.  
       
    41.  
      void CreatTree(BitNode* &root,char *pre,int l1,int r1,char *in,int l2,int r2)
    42.  
      {
    43.  
      if(l1<=r1&&l2<=r2)
    44.  
      {
    45.  
      int key=pre[l1];
    46.  
      int midIndex=-1;
    47.  
      for(int i=l2;i<=r2;i++)
    48.  
      {
    49.  
      if(in[i]==key)
    50.  
      {
    51.  
      midIndex=i;
    52.  
      break;
    53.  
      }
    54.  
      }
    55.  
      root=(BitNode *)malloc(sizeof(BitNode));
    56.  
      root->value=key;
    57.  
      root->lchild=NULL;
    58.  
      root->rchild=NULL;
    59.  
      int llen=midIndex-l2;
    60.  
      CreatTree(root->lchild, pre, l1+1, l1+llen, in, l2, midIndex-1);
    61.  
      CreatTree(root->rchild, pre, l1+llen+1, r1, in, midIndex+1, r2);
    62.  
      }
    63.  
      }
    64.  
       
    65.  
      void postOrderTraverse(BitNode *&root)
    66.  
      {
    67.  
      if(root->lchild)
    68.  
      postOrderTraverse(root->lchild);
    69.  
      if(root->rchild)
    70.  
      postOrderTraverse(root->rchild);
    71.  
      printf("%c",root->value);
    72.  
      }
    73.  
       
    74.  
      int main()
    75.  
      {
    76.  
      char pre[N],in[N];
    77.  
      while(scanf("%s",pre)!=EOF)
    78.  
      {
    79.  
      scanf("%s",in);
    80.  
      int len1=strlen(pre);
    81.  
      int len2=strlen(in);
    82.  
      BitNode *root=NULL;
    83.  
      CreatTree(root,pre,0,len1-1,in,0,len2-1);
    84.  
      postOrderTraverse(root);
    85.  
      printf("\n");
    86.  
      }
    87.  
      return 0;
    88.  
      }

C++ 函数参数中“ *&代表什么? ”的更多相关文章

  1. python函数参数中带有默认参数list的坑

    在python中函数参数中如果带有默认参数list遇到问题 先看一段代码 def f(x,l=[]): for i in range(x): l.append(i*i) print(l) print( ...

  2. (转)python中函数参数中如果带有默认参数list的特殊情况

    在python中函数参数中如果带有默认参数list遇到问题 先看一段代码 1 2 3 4 5 6 7 8 9 def f(x,l=[]):     for i in range(x):         ...

  3. 关于cmp函数参数中的&符号

    关于cmp函数参数中的&符号 关于sort函数中的cmp函数有着不同的写法,以刚刚的整形元素比较为例 还有人是这么写的: bool cmp(const int &a, const in ...

  4. Python函数参数中的冒号与箭头

    在一些Python的工程项目中,我们会看到函数参数中会有冒号,有的函数后面会跟着一个箭头,你可能会疑惑,这些都是什么东西? 其实函数参数中的冒号是参数的类型建议符,告诉程序员希望传入的实参的类型.函数 ...

  5. Delphi 中 函数参数中的 const 修饰符的本质以及注意事项

    来自:http://blog.csdn.net/farrellcn/article/details/9096787 ------------------------------------------ ...

  6. javascript 在一个函数参数中包含另一个函数的引用

    javascript函数的参数包含另一个函数的情形: <script> //b函数的参数func为另一个函数 function b(a, func) {  alert(a); //调用参数 ...

  7. C++函数参数中的省略号

    本文基本是转载自:https://blog.csdn.net/think12/article/details/5785066 另一篇看到写得很好的博客:https://www.cnblogs.com/ ...

  8. 【VS开发】程序如何捕捉signal函数参数中指定的信号

    当说到signal的功能时,我们都知道它会捕捉我们所指定的信号,然后调用我们所指定的信号处理函数.但它是如何捕捉我们指定的信号的呢?下面我就以msdn上关于signal的example为例,说明sig ...

  9. C# 函数参数中的this

    先看下面的代码: public static class StringExtension { public static void Foo(this string s) { Console.Write ...

随机推荐

  1. Python全栈开发之4、内置函数、文件操作和递归

    转载请注明出处http://www.cnblogs.com/Wxtrkbc/p/5476760.html 一.内置函数 Python的内置函数有许多,下面的这张图全部列举出来了,然后我会把一些常用的拿 ...

  2. ffmpeg 编译graph2dot

    cd ffmpeg ./configure make make tools/graph2dot

  3. 【Java】 String和char[]类型间的相互转化

    (1)String类型转char[] 类型,使用String类型的toCharArray()方法: (2)char[] 类型转String类型,使用String.valueOf()方法: public ...

  4. disconf-client-for-java

    一.disconf客户端部署 disconf目前仅支持java客户端,下文针对java客户端安装作为整理,记录下安装部署的步骤 1.环境依赖 首先需要安装java环境及maven环境,不再过多介绍 2 ...

  5. java抽象类、多态、接口

    抽象类 抽象类的产生 当编写一个类时,我们往往会为该类定义一些方法,这些方法是用来描述该类的功能具体实现方式,那么这些方法都有具体的方法体. 但是有的时候,某个父类只是知道子类应该包含怎么样的方法,但 ...

  6. MySQL之varchar

    MySQL之varchar 0.前言 探究关于MySQL中varchar长度的定义 1.研究MySQL的varchar列类型的背景 1.MySQL5.x 2.InnoDB 2.varchar 对于va ...

  7. shell sh bash 概念

    在shell脚本的开头往往有一句话来定义使用哪种sh解释器来解释脚本.目前研发送测的shell脚本中主要有以下两种方式:(1) #!/bin/sh(2) #!/bin/bash以上两种方式有什么区别? ...

  8. Unity Shader 之 透明效果

    透明效果 透明效果一般有两种实现方法: 第一种,使用透明度测试(Alpha Test) 第二种,使用透明度混合(Alpha Blending) 透明度测试和透明度混合机制: 透明度测试(Alpha T ...

  9. Python 面向对象编程——初见

    <什么是面向对象>  面向对象编程(Object Oriented Programming),简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...

  10. sql:将字符类型字段转换成数字并排序

    使用cast 函数可以把字符类型字段(数学形式)转换为数字 比如 AND m.nfrc_meeting_no=? ORDER BY cast(m.BOOTH AS INT) ASC "; 结 ...