数据跟着函数传递
int a(btnode*p){
// 注意!!!把不同的情况全部列出来,并且列出所有的情况的return输出
// 对于需要比较两个及以上节点的情况
// 1,可以先判断(p1==null&&p2==null) 再判断(p1!=null||p2!=null),简写步骤
// 2,建议允许遍历到空节点再筛选,而不要强制遍历非空节点,不然判断条件会很混乱
int num1,num2;
if(p==null)
return num0;
if(p!=null){
num1=a(p->left);
num2=a(p->right);
}
return num1与num2;
}
数据以一个独立的数据单元的形式进行传输
注意:此例子表示的n特指二叉树中遍历到的节点的层数,可以引申为每个二叉树中的节点都有的特质
假如要求二叉树中序遍历的第k个节点的值,此时没有int&k和int k的切换,仅是int&k,在第二次离开p节点之前进行 - -k操作
注意:如果是int&n,操作是在外的++与- -,如果是int n的话需要在函数里面显示+1或者-1
int&n的情况
void fun(btnode*p,int&n){
if(p!=null){
1//第一次离开p节点之前
n++;
fun(p->lchild,n);
2//第二次离开p节点之前
fun(p->rchild,n);
n--;
3//第三次访问p之前
}
}
int n的情况
void fun(btnode*p,int n){
if(p!=null){
1//第一次离开p节点之前
fun(p->lchild,n+1);
2//第二次离开p节点之前
fun(p->rchild,n+1);
3//第三次访问p之前
}
}