二叉树基本解法


数据跟着函数传递

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之前
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值