基础实验4-2.2 列出叶结点 (25分)

对于给定的二叉树,本题要求你按从上到下、从左到右的顺序输出其所有叶节点。

输入格式:
首先第一行给出一个正整数 N(≤10),为树中结点总数。树中的结点从 0 到 N−1 编号。随后 N 行,每行给出一个对应结点左右孩子的编号。如果某个孩子不存在,则在对应位置给出 “-”。编号间以 1 个空格分隔。

输出格式:
在一行中按规定顺序输出叶节点的编号。编号间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:
8
1 -

0 -
2 7

5 -
4 6

输出样例:
4 1 5

在这里插入图片描述

//列出叶节点
#include <iostream>
#include <queue>

#define null -1
int N;
using namespace std;
struct node{
    int element;
    int left,right;
    int data=0;
}p[15];


//建立一个树

int BuidTree(){
    int i;
    char cl,cr;
    cin>>N;
    int Root=-1;
    int check[N];
    for(i=0;i<N;i++){
        p[i].element=i;
        check[i]=0;
    }
    for(i=0;i<N;i++){
        cin>>cl>>cr;
        cout<<cl<<cr<<endl;
        if(cl!='-'){
            p[i].left=cl-'0';
            check[p[i].left]=1;
            cout<<"check001:"<<p[i].left<<endl;
        }else{
            p[i].left=null;
            cout<<"check002:"<<p[i].left<<endl;
        }
        if(cr!='-'){
            p[i].right=cr-'0';
            check[p[i].right]=1;
            cout<<"check003:"<<p[i].right<<endl;
        }else{
            p[i].right=null;
            cout<<"check004:"<<p[i].right<<endl;
        }
    }
    for(i=0;i<N;i++){
        if(check[i]==0)break;
    }
    Root=i;
    return Root;
}

//遍历整个树,并且从上到下,从左到右重新编号,层序遍历

void print(int root){
    if(root!=null){
        cout<<"递归的先序遍历"<<root<<"  ";
        print(p[root].left);
        cout<<"hello kitty"<<p[root].right<<endl;
        print(p[root].right);
    }
    cout<<"跳出递归"<<endl;
}
//用queue进行层序遍历;
void TranTree(int root,int N){
    int i=0;
    queue<int>q1;
    q1.push(root);
    while(!q1.empty()){
        p[i].data=q1.front();	//记录最前面的数字,然后再pop掉,
        cout<<q1.front()<<endl;
        q1.pop();
        //分别依次把左右两边记录到队列中
        if(p[p[i].data].left!=null){	
            q1.push(p[p[i].data].left);
        }
        if(p[p[i].data].right!=null){
            q1.push(p[p[i].data].right);
        }
        i++;
    }
    //p[i].data记录了层序遍历中,每个元素的顺序;
    for(i=0;i<N;i++){
        if(p[p[i].data].left==null){
            if(p[p[i].data].right==null){
                cout<<p[i].data<<endl;;
            }
        }
    }
}

    
int main(){
    int R1;
    R1=BuidTree();
    print(R1);
    TranTree(R1, 8);
    return 0;
}

发布了65 篇原创文章 · 获赞 0 · 访问量 1303

猜你喜欢

转载自blog.csdn.net/hellobettershero/article/details/104391475
今日推荐