二叉树基本运算算法

目录

1.效果截图:

 2.基本运算,写进头文件中  

3.主函数

4.编写界面


 2.基本运算,写进头文件<btree.h>中  

#ifndef BTREE_H_INCLUDED
#define BTREE_H_INCLUDED
//二叉树的基本运算算法
#include<stdio.h>
#include<malloc.h>
#define MaxSize 100
typedef char ElemType;
typedef struct node
{
    ElemType data;//数据元素
    struct node *lchild;//指向左孩子结点
    struct node *rchild;//指向右孩子结点
}BTNode;
//创建二叉树
void CreatBTree(BTNode *&b,char *str)
{
    BTNode *St[MaxSize],*p=NULL;
    int top=-1,k,j=0;
    char ch;
    b=NULL;//初始时二叉树为空
    ch=str[j];
    while(ch!='\0')//str未扫描完时循环
    {
        switch(ch)
        {
            case '(':
                top++;St[top]=p;k=1;break;//处理左孩子结点
            case ')':
                top--;break;
            case ',':
                k=2;break;//处理右孩子结点
            default :
                p=(BTNode *)malloc(sizeof(BTNode));
                p->data=ch;
                p->lchild=p->rchild=NULL;
                if(b==NULL)//p作为根结点
                    b=p;
                else
                {
                    switch(k)
                    {
                       case 1:St[top]->lchild=p;break;
                       case 2:St[top]->rchild=p;break;

                    }
                }

        }
        j++;ch=str[j];
    }

}
//销毁二叉树
void DestroyBTree(BTNode *&b)
{
    if(b!=NULL)
    {
        DestroyBTree(b->lchild);
        DestroyBTree(b->rchild);
        free(b);
    }
}
//查找值为x的结点
BTNode * FindNode(BTNode *b,ElemType x)
{
    BTNode *p;
    if(b==NULL)
        return NULL;
    else if(b->data==x)
        return b;
    else
    {
        p=FindNode(b->lchild,x);
        if(p!=NULL)
            return p;
        else
            return FindNode(b->rchild,x);
    }
}
//找结点是否有左孩子
BTNode * LchildNode(BTNode *p)
{
    return p->lchild;
}
//找结点是否有右孩子
BTNode * RchildNode(BTNode *p)
{
    return p->rchild;
}
//求二叉树的高度
int BTHeight(BTNode *b)
{
    int lchildh,rchildh;
    if(b==NULL) return 0;
    {
        lchildh=BTHeight(b->lchild);//求左子树的高度
        rchildh=BTHeight(b->rchild);//求右子树的高度
        return (lchildh>rchildh)?(lchildh+1):(rchildh+1);

    }

}
//以括号表示法输出二叉树
void DispBTree(BTNode *b)
{
    if(b!=NULL)
    {
        printf("%c",b->data);
        if(b->lchild!=NULL||b->rchild!=NULL)
        {
            printf("(");
            DispBTree(b->lchild);
            if(b->rchild!=NULL)printf(",");//有右孩子
            DispBTree(b->rchild);
            printf(")");
        }
    }
}
#endif // BTREE_H_INCLUDED

3.主函数

#include"btree.h"
int main()
{
    BTNode *b,*p,*lp,*rp;
    printf("二叉树的基本运算如下:\n");
    printf("1.创建二叉树\n");
    CreatBTree(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))");
    printf("2.输出二叉树:");DispBTree(b);printf("\n");
    printf("3.H结点:");
    p=FindNode(b,'H');
    if(p!=NULL)
    {
        lp=LchildNode(p);
        if(lp!=NULL)
            printf("左孩子为%c",lp->data);
        else
            printf("无左孩子");
        rp=RchildNode(p);
		if (rp!=NULL)
			printf("右孩子为%c",rp->data);
		else
			printf("无右孩子 ");
    }
    printf("\n");
    printf("4.二叉树的高度为:%d\n",BTHeight(b));
    printf("5.释放二叉树b\n");
    return 88;
}

4.编写界面

 

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是用C语言实现二叉树基本运算算法的示例代码: ```c #include <stdio.h> #include <stdlib.h> // 定义二叉树结构体 typedef struct Node { int data; // 数据域 struct Node *left; // 左子节点指针 struct Node *right; // 右子节点指针 } Node; // 创建节点 Node *createNode(int data) { Node *node = (Node *) malloc(sizeof(Node)); node->data = data; node->left = NULL; node->right = NULL; return node; } // 插入节点 Node *insertNode(Node *root, int data) { // 如果根节点为空,则新建一个节点作为根节点 if (root == NULL) { root = createNode(data); } // 如果数据小于根节点的数据,则插入到左子树 else if (data < root->data) { root->left = insertNode(root->left, data); } // 如果数据大于等于根节点的数据,则插入到右子树 else { root->right = insertNode(root->right, data); } return root; } // 查找节点 Node *findNode(Node *root, int data) { // 如果根节点为空,则返回NULL if (root == NULL) { return NULL; } // 如果数据等于根节点的数据,则返回根节点 else if (data == root->data) { return root; } // 如果数据小于根节点的数据,则在左子树中查找 else if (data < root->data) { return findNode(root->left, data); } // 如果数据大于根节点的数据,则在右子树中查找 else { return findNode(root->right, data); } } // 删除节点 Node *deleteNode(Node *root, int data) { Node *temp; if (root == NULL) { return NULL; } else if (data < root->data) { root->left = deleteNode(root->left, data); } else if (data > root->data) { root->right = deleteNode(root->right, data); } else { if (root->left == NULL) { temp = root->right; free(root); return temp; } else if (root->right == NULL) { temp = root->left; free(root); return temp; } else { temp = root->right; while (temp->left != NULL) { temp = temp->left; } root->data = temp->data; root->right = deleteNode(root->right, temp->data); } } return root; } // 中序遍历 void inorderTraversal(Node *root) { if (root != NULL) { inorderTraversal(root->left); printf("%d ", root->data); inorderTraversal(root->right); } } int main() { Node *root = NULL; // 插入节点 root = insertNode(root, 5); root = insertNode(root, 3); root = insertNode(root, 8); root = insertNode(root, 2); root = insertNode(root, 4); root = insertNode(root, 7); root = insertNode(root, 9); // 中序遍历 printf("Inorder traversal: "); inorderTraversal(root); printf("\n"); // 查找节点 Node *node = findNode(root, 4); if (node != NULL) { printf("Node found: %d\n", node->data); } else { printf("Node not found\n"); } // 删除节点 root = deleteNode(root, 5); // 中序遍历 printf("Inorder traversal: "); inorderTraversal(root); printf("\n"); return 0; } ``` 以上代码实现了二叉树基本操作,包括创建节点、插入节点、查找节点、删除节点和中序遍历等。你可以根据自己的需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值