二叉树的三种遍历方式

二叉树的三种遍历方式

  1. 先序遍历:按照根节点->左子树->右子树的顺序访问二叉树

  2. 中序遍历:按照左子树->根节点->右子树的顺序访问

  3. 后序遍历:按照左子树->右子树–>根节点的顺序访问

    已知先序,中序,求后序

    在这里插入图片描述

    #include<iostream>
    #include<cstring> 
    using namespace std;
    string a,b;
    void work(int al,int ar,int bl,int br){
    	int bk;//保存中序遍历中根节点位置
    	for(int i=bl;i<br;i++){
    		if(b[i]==a[al]){
    			bk=i;
    			break;
    		}
    	}
    	int ln=bk-bl;//左子树节点个数
    	int rn=br-(bk+1);//右子树节点个数
    	if(ln>0){
    		work(al+1,al+1+ln,bl,bl+ln);
    	} 
    	if(rn>0){
    		work(ar-rn,ar,bk+1,bk+1+rn);
    	}
    	cout<<a[al];//最后输出根节点 
    	return;
    }
    int main(){
    	cin>>b>>a;
    	int l=a.length();
    	work(0,l,0,l);//先序遍历查找范围[0,l),后序遍历查找范围[0,l) 
    	return 0;
    }
    

    已知中序,后序,求先序

    #include<iostream>
    #include<cstring>
    using namespace std;
    string a,b;
    /*void work(int al,int ar,int bl,int br){
        if (al > ar || bl > br) {
            return;
        }
        cout<<b[br];
        for (int k = al; k <= ar; k++) {
            if (a[k] == b[br]) {
                work(al, k-1, bl, bl+k-al-1);
                work(k+1, ar, bl+k-al, br-1);
                break; 
            }
        }
    }*/
    void work(int al,int ar,int bl,int br){\
    	if (al > ar || bl > br) {
            return;
        }
    	cout<<b[br];
    	int k;
    	for(int i=al;i<=ar;i++){
    		if(a[i]==b[br]){
    			k=i;
    			break;
    		}
    	}
    	int ln=k-al,rn=ar-k;
    	work(al,al+ln-1,bl,bl+ln-1);
    	work(k+1,ar,bl+ln,br-1);
    }
    int main(){
    	cin>>a>>b;
    	int l=a.length()-1;
    	work(0,l,0,l);
    	return 0;
    }
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值