精华内容
下载资源
问答
  • 已知任意一种遍历,可以唯一的确定一颗完全二叉树,上代码: // 8节点数目 // 91 71 2 34 10 15 55 18后序遍历 // 输出样例: // 18 34 55 71 2 10 15 91层次遍历 #include<bits/stdc++.h> using namespace...
    我们可以通过用数组模拟完全二叉树,根据完全二叉树的特点,
    已知任意一种遍历,可以唯一的确定一颗完全二叉树,上代码:
    
    // 8节点数目
    // 91 71 2 34 10 15 55 18后序遍历 
    // 输出样例:
    // 18 34 55 71 2 10 15 91层次遍历
    
    #include<bits/stdc++.h>
    using namespace std;
    int n,m;
    int postorder[100],tree[100];
    int ind = 1;
    void gettree(int x){
        if(x > n) return ;
        else{
            gettree(x << 1);
            gettree((x << 1) + 1);
            tree[x] = postorder[ind++];
        }
        return ;
    }
    void preorder(int x){
        if(x > n) return ;
        else{
            printf("%d ",tree[x]);
            preorder(x << 1);
            preorder((x << 1) + 1);
        }
    }
    
    void inorder(int x){
        if(x > n) return ;
        else{
            inorder(x << 1);
             printf("%d ",tree[x]);
            inorder((x << 1) + 1);
        }
    }
    int main(){
        scanf("%d",&n);
        for(int i = 1; i <= n; i++){
            scanf("%d",&postorder[i]);
        }
        gettree(1);
        printf("层次遍历:");
        for(int i = 1; i <= n; i++) printf("%d ",tree[i]);
        // printf("\n");
        // printf("先序遍历:");
        // preorder(1);
        // printf("\n");
        // printf("中序遍历:");
        // inorder(1);
    }
    
    展开全文
  • //输入参数为广度优先算法遍历的二叉树字符串LIST,每个节点对应子节点数LIST。 // public static TreeNode<String> rebuildFromBFSList(List<String> bfsData, List<Integer> childCounts)...
  • 树的层次遍历英文逗号分隔和指定的节点。节点的值必须是整型。 输出 中序遍历指定节点的下一个节点值。所有异常情况和没有下一个节点,请输出整型 -1 。 样例输入 1,2,3,4,5,6,7,8,9 4 样例输出 9 c++代码 #include ...

    输入
    树的层次遍历英文逗号分隔和指定的节点。节点的值必须是整型。
    输出
    中序遍历指定节点的下一个节点值。所有异常情况和没有下一个节点,请输出整型 -1 。

    样例输入
    1,2,3,4,5,6,7,8,9
    4
    样例输出
    9

    c++代码

    #include <iostream>
    #include <stdio.h>
    #include <algorithm>
    #include <vector>
    #include <cmath>
    #include <cstring>
    #include <string>
    #include <queue>
    #include <map>
    #include <set>
    #include <cstdlib>
    #include <stack>
    #include <limits>
    #include<limits.h>
    #include <unordered_set>
    #include <sstream>
    using namespace std;
    void help(vector<int> v, int root, vector<int> &res, int n) {
        if(root > n) {
            return;
        }
        help(v, root * 2, res, n);
        res.push_back(v[root]);
        help(v, root * 2 + 1, res, v.size() - 1);
    }
    int main() {
        string s;
        vector<int> v(1, 0);
        getline(cin, s);
        istringstream is(s);
        int inter;
        char ch;
        while (is >> inter)
        {
             v.push_back(inter);
             is >> ch;
        }
        int k;
        cin>>k;
        vector<int> res;
        help(v, 1, res, v.size() - 1);
        bool flag = false;
        for(int i = 0; i < res.size(); i++) {
            if(res[i] == k && i + 1 < res.size()) {
                cout << res[i + 1] << endl;
                flag = true;
            }
        }
        if(!flag)
            cout << -1 << endl;
        return 0;
    }
    
    
    展开全文
  • 求二叉树层次遍历

    2018-08-15 09:27:51
    已知一颗二叉树的前序遍历和中序遍历,求二叉树层次遍历。 Input 输入数据有多组,输入T,代表有T组测试数据。每组数据有两个长度小于50的字符串,第一个字符串为前序遍历,第二个为中序遍历。 Output 每组...

    求二叉树的层次遍历
    Time Limit: 1000 ms Memory Limit: 65536 KiB

    Problem Description
    已知一颗二叉树的前序遍历和中序遍历,求二叉树的层次遍历。

    Input
    输入数据有多组,输入T,代表有T组测试数据。每组数据有两个长度小于50的字符串,第一个字符串为前序遍历,第二个为中序遍历。

    Output
    每组输出这颗二叉树的层次遍历。

    Sample Input
    2
    abc
    bac
    abdec
    dbeac
    Sample Output
    abc
    abcde
    Hint
    Source
    fmh


    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    typedef struct node
    {
        int data;
        struct node *l,*r;
    }bitnode;
    
    bitnode *creat(int l,char qx[],char zx[])
    {
        int i;
        bitnode *root;
        if(l==0) return NULL;
        root=(bitnode *)malloc(sizeof(bitnode));
        root->data=qx[0];
        for(i=0;i<l;i++)
        {
            if(zx[i]==qx[0])
                break;
        }
        root->l=creat(i,qx+1,zx);
        root->r=creat(l-i-1,qx+1+i,zx+1+i);
            return root;
    }
    
    void cc(bitnode *root)
    {
        int in=0,out=0;
        bitnode *num[66];
        num[in++]=root;
        while(in>out)
        {
            if(num[out])
            {
                printf("%c",num[out]->data);
                num[in++]=num[out]->l;
                num[in++]=num[out]->r;
            }
            out++;
        }
    }
    int main()
    {
        int t,l;
        char qx[55],zx[55];
    
        while(~scanf("%d",&t))
        {
            while(t--)
            {
                scanf("%s %s",qx,zx);
                l=strlen(qx);
                bitnode *root;
                root=creat(l,qx,zx);
                cc(root);
                printf("\n");
            }
        }
        return 0;
    }
    
    
    展开全文
  •  已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历。 输入  输入数据有多组,第一行是一个整数t (t 输出 每组第一行输出二叉树的后序遍历序列,第二行输出二叉树层次遍历序列 示例输入

    数据结构实验之求二叉树后序遍历和层次遍历

    Time Limit: 1000MS Memory limit: 65536K

    题目描述

     已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历。

    输入

     输入数据有多组,第一行是一个整数t (t<1000),代表有t组测试数据。每组包括两个长度小于50 的字符串,第一个字符串表示二叉树的先序遍历序列,第二个字符串表示二叉树的中序遍历序列。

    输出

    每组第一行输出二叉树的后序遍历序列,第二行输出二叉树的层次遍历序列

    示例输入

    2
    abdegcf
    dbgeafc
    xnliu
    lnixu

    示例输出

    dgebfca
    abcdefg
    linux
    xnuli

    提示

     

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<malloc.h>
    
    char pre[1000],mid[1000];//前序和后序
    struct node
    {
        char data;
        struct node *lc,*rc;
    };
    
    //已知前中序列求后序方法一
    /*struct node *check(char pre[],char mid[],int len)
    {
        struct node *root;
        if(len<=0)
        {
            return NULL;
        }
        char *p;
        int k;
        root=(struct node *)malloc(sizeof(struct node));
        root->data=pre[0];
        for(p=mid;p!=NULL;p++)//从中序中查找与前序中树根节点相同的值
        {
            if(*p==*pre)
                break;
        }
        k=p-mid;
        //通过递归调用查找子数的树根
        root->lc=check(pre+1,mid,k);//无限递归调用左子树
        root->rc=check(pre+k+1,p+1,len-k-1);//无限递归调用右子树
        return root;
    }*/
    
    //已知前中序列求后序方法二
    struct node *check(char pre[],char mid[],int len)
    {
        struct node *root;
        if(len<=0)
        {
            return NULL;
        }
        char *p;
        int k;
        root=(struct node *)malloc(sizeof(struct node));
        root->data=pre[0];
        int i;
        for(i=0;i<len;i++)//从中序中查找与前序中树根节点相同的值
        {
            if(mid[i]==pre[0])
                break;
        }
        //通过递归调用查找子数的树根
        root->lc=check(pre+1,mid,i);//无限递归调用左子树
        root->rc=check(pre+i+1,mid+i+1,len-i-1);//无限递归调用右子树
        return root;
    }
    //后序输出
    void lastput(struct node *root)
    {
        if(root!=NULL)
        {
            lastput(root->lc);
            lastput(root->rc);
            printf("%c",root->data);
        }
    }
    //层序输出
    void septum(struct node *root)
    {
        int yes,no;
        yes=no=0;
        struct node *q[1000];
        q[yes++]=root;
        while(yes>no)
        {
            if(q[no]!=NULL)
            {
                printf("%c",q[no]->data);
                q[yes++]=q[no]->lc;
                q[yes++]=q[no]->rc;
            }
            no++;
        }
    }
    int main()
    {
        int n;
        scanf("%d",&n);
        while(n--)
        {
            struct node *root1;
            scanf("%s %s",&pre,&mid);
            int len;
            len=strlen(pre);
            root1=check(pre,mid,len);
            lastput(root1);
            printf("\n");
            septum(root1);
            printf("\n");
        }
        return 0;
    }
    


    展开全文
  • 已知一颗二叉树的前序遍历和中序遍历,求二叉树层次遍历。 Input 输入数据有多组,输入T,代表有T组测试数据。每组数据有两个长度小于50的字符串,第一个字符串为前序遍历,第二个为中序遍历。 Outpu...
  • 二、已知层次遍历顺序,构建二叉树。(链式存储) 三、已知节点关系,建立二叉树(邻接表存储) 四、已知先序和中序遍历顺序,建立二叉树。 前提知识: 约定: 约定二叉树的内容为int类型,并且都>=1,0...
  • 已知一颗二叉树的前序遍历和中序遍历,求二叉树层次遍历。 Input 输入数据有多组,输入T,代表有T组测试数据。每组数据有两个长度小于50的字符串,第一个字符串为前序遍历,第二个为中序遍历。 Ou...
  • 已知一颗二叉树的前序遍历和中序遍历,求二叉树层次遍历。 Input 输入数据有多组,输入T,代表有T组测试数据。每组数据有两个长度小于50的字符串,第一个字符串为前序遍历,第二个为中序遍历。 Output 每组输出这...
  • 已知一颗二叉树的前序遍历和中序遍历,求二叉树层次遍历。 Input 输入数据有多组,输入T,代表有T组测试数据。每组数据有两个长度小于50的字符串,第一个字符串为前序遍历,第二个为中序遍历。 Output 每组...
  • 后序:8 9 4 10 5 2 6 7 3 1 中序:8 4 9 2 10 5 1 6 3 7 思路 1、i节点的左孩子可以表示为:2i+1,右孩子可以表示为:2i; 2、后序的最后一个节点为根节点,在中序中找到根节点所在的位置index,这样index左面全部...
  • 已知一颗二叉树的前序遍历和中序遍历,求二叉树层次遍历。 Input 输入数据有多组,输入T,代表有T组测试数据。每组数据有两个长度小于50的字符串,第一个字符串为前序遍历,第二个为中序遍历。 Ou...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,953
精华内容 2,781
关键字:

已知二叉树求层次