二叉树

简介: 二叉树

二叉树所有相关的知识

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct node
{
    char data;
    struct bitree *l,*r;
};
char a[55],b[55];//a前序b中序
int l1,h1,l2,h2;
struct node *creat() //前序建立
{
    struct node *root;
    char c;
    c = a[l1++];
    if(c == ',')
        return NULL;
    else
    {
        root = (struct node *)malloc(sizeof(struct node));
        root->data = c;
        root->l=creat();
        root->r=creat();
    }
    return root;
}
struct node *creat2(int n,char *a,char *b)//前序中序建立
{
    struct node *root;
    int i;
    if(n == 0)
        return NULL;
    root = (struct node *)malloc(sizeof(struct node));
    root->data=a[0];
    for(i = 0;i < n;i++)
    {
        if(b[i] == a[0])
            break;
    }
    root->l=creat2(i,a+1,b);
    root->r=creat2(n-i-1,a+i+1,b+i+1);
    return root;
}
struct node *creat3(int n,char *a,char *b)//中序后序建立
{
    struct node *root;
    int i;
    if(n == 0)
        return NULL;
    root = (struct node *)malloc(sizeof(struct node));
    root->data=b[n-1];
    for(i = 0;i < n;i++)
    {
        if(a[i] == b[n-1])
            break;
    }
    root->l=creat3(i,a,b);
    root->r=creat3(n-i-1,a+i+1,b+i);
    return root;
}
void preorder(struct node *root) //前序遍历
{
    struct node *p;
    p = root;
    if(p!=NULL)
    {
        printf("%c",p->data);
        preorder(p->l);
        preorder(p->r);
    }
}
void inorder(struct node *root)//中序遍历
{
    struct node *p;
    p = root;
    if(p!=NULL)
    {
        inorder(p->l);
        printf("%c",p->data);
        inorder(p->r);
    }
}
void postorder(struct node *root)//后序遍历
{
    struct node *p;
    p = root;
    if(p!=NULL)
    {
        postorder(p->l);
        postorder(p->r);
        printf("%c",p->data);
    }
}
int treehight(struct node *t) //二叉数高度
{
    int h,lh,rh;
    if(t == NULL)
    {
        h = 0;
    }
    else
    {
        lh = treehight(t->l);
        rh = treehight(t->r);
        if(lh>rh)
            h = lh+1;
        else
            h = rh+1;
    }
    return h;
}
int main()
{
    int n,t;
    scanf("%d",&t);
    while(t--)
    {
        struct node *root;
        scanf("%s%s",a,b);
        n = strlen(a);
        root = creat3(n,a,b);
        printf("%d\n",treehight(root));
    }
    return 0;
}


相关文章
|
8月前
|
算法 前端开发
2583. 二叉树中的第 K 大层和
2583. 二叉树中的第 K 大层和
61 0
|
4月前
|
算法
22_最大二叉树
22_最大二叉树
|
8月前
|
存储
|
8月前
|
存储 C++
二叉树
二叉树“【5月更文挑战第22天】”
37 3
|
7月前
|
Java
二叉树
二叉树
27 0
二叉树的讲解
1.若规定根节点的层数为1,则一棵非空二叉树的第i层上最多有2^(i-1) 个结点. 2. 若规定根节点的层数为1,则深度为h的二叉树的最大结点数是 2^h-1. 3. 对任何一棵二叉树, 如果度为0其叶结点个数为n0 , 度为2的分支结点个数为02 ,则有n0 =n2 +1 4. 若规定根节点的层数为1,具有n个结点的满二叉树的深度,h= . (ps: 是log以2为底,n+1为对数) 5. 对于具有n个结点的完全二叉树,如果按照从上至下从左至右的数组顺序对所有节点从0开始编号,则对于序号为i的结点有:
二叉树的讲解
|
8月前
|
算法 网络协议 NoSQL
认识二叉树(详细介绍)
认识二叉树(详细介绍)
【二叉树】(二)
【二叉树】(二)
48 0