php中文网 | cnphp.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 506|回复: 0

二叉树 基本操作

[复制链接]

3146

主题

3156

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

UID
1
威望
0
积分
7966
贡献
0
注册时间
2021-4-14
最后登录
2024-11-23
在线时间
763 小时
QQ
发表于 2022-7-10 22:17:00 | 显示全部楼层 |阅读模式
/*二叉树
基本操作:
创建,
凹入法输出,
求叶子结点数,
求结点数,
求深度,
根据给定值进行查找*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
typedef struct Tnode
{
        int data;
        struct Tnode* lchild;
        struct Tnode* rchild;
}Tnode,*BiTree;
void creat(BiTree *T);
void disTree(BiTree T,int n,char c);
int leafnum(BiTree T);
int nodenum(BiTree T);
int depth(BiTree T);
BiTree search(BiTree T, int e);
void dis(BiTree T, int n, char c);
int main()
{
        BiTree T, p; int e;
        printf("输入节点值,以0结束:\n");
        creat(&T); printf("创建成功!\n");
        printf("凹入表如下;\n");
        disTree(T, 8, 'D');
        dis(T, 10, 'D');
        printf("叶子结点数:%d\n", leafnum(T));
        printf("结点数:%d\n", nodenum(T));
        printf("深度:%d\n", depth(T));
        printf("请输入查询结点的值:");
        scanf_s("%d", &e);
        p = search(T, e);
        if (p==NULL)printf("该节点不存在!\n");
        if (p->rchild == NULL && p->lchild == NULL) printf("该节点为叶子结点!\n");
        if (!p->lchild && p->rchild) printf("该节点的左孩子不存在,右孩子为%d!\n", p->rchild->data);
        if (!p->rchild && p->lchild) printf("该节点的左孩子是%d,右孩子为空!\n", p->lchild->data);
        else
                printf("该节点的左孩子是%d,右孩子是%d\n", p->lchild->data, p->rchild->data);
}
void creat(BiTree *T)
{
        int n;
        scanf_s("%d", &n);
        if (n == 0) *T = NULL;
        else
        {
            *T=(BiTree)malloc(sizeof(Tnode));
                (*T)->data = n;
                creat(&((*T)->rchild));
                creat(&((*T)->lchild));
        }
}
void disTree(BiTree T,int n,char c)
{
        int i;
        if (T)
        {
                for (i = 0; i < n+4; i++)
                        putchar('-');
                putchar('+');
                printf("%d(%c)\n", T->data, c);
                n = n - 1;
                disTree(T->lchild, n, 'L');
                disTree(T->rchild, n, 'R');
        }
}
void dis(BiTree T, int n, char c)
{
        int i;
        if (T)
        {
                for (i = 0; i < n; i++)
                {
                        putchar('-');
                }
                putchar('+');
                printf("%d(%c)\n", T->data, c);

                dis(T->lchild, n-2, 'L');
                dis(T->rchild, n - 2, 'R');
        }
}
int leafnum(BiTree T)
{
        int l, r;
        if (!T) return 0;
        if (!T->lchild && !T->rchild) return 1;
        else
        {
                l = leafnum(T->lchild);
                r = leafnum(T->rchild);
                return(l + r);
        }
}
int nodenum(BiTree T)
{
        int l, r;
        if (!T) return 0;
        if (!T->lchild && !T->rchild) return 1;
        else
        {
                l = nodenum(T->lchild);
                r = nodenum(T->rchild);
                return(l + r+1);

        }
}
int depth(BiTree T)
{
        int l, r,d;
        if (!T) return 0;
        if (!T->lchild && !T->rchild) return 1;
        else
        {
                l = depth(T->lchild);
                r = depth(T->rchild);
                d = l > r ? l : r;
                return (d+1);
        }
}
BiTree search(BiTree T, int e)
{
        if (!T) return NULL;
        else
        {
                if (T->data == e) return T;
                else
                {
                        search(T->lchild, e);
                        search(T->rchild, e);
                }
        }
}

相关帖子

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|php中文网 | cnphp.com ( 赣ICP备2021002321号-2 )

GMT+8, 2024-11-23 20:21 , Processed in 0.258019 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

申明:本站所有资源皆搜集自网络,相关版权归版权持有人所有,如有侵权,请电邮(fiorkn@foxmail.com)告之,本站会尽快删除。

快速回复 返回顶部 返回列表