zoukankan      html  css  js  c++  java
  • 二叉树的基本运算

      1 #include <iostream>
      2 #include <cstdlib>
      3 using namespace std;
      4 #define datatype char
      5 typedef struct node
      6 {
      7     datatype data;
      8     struct node *lchild;
      9     struct node *rchild;
     10 }*bitree,binode;                        /*二叉树*/
     11 void initbitree(bitree *T)
     12 {
     13     *T=NULL;
     14 }
     15 void destroybitree(bitree *T)                /*二维指针*/
     16 {
     17     if(*T)                        /*如果是非空二叉树*/
     18     {
     19         if((*T)->lchild)
     20             destroybitree(&((*T)->lchild));
     21         if((*T)->rchild)
     22             destroybitree(&((*T)->rchild));
     23         free(*T);
     24         *T=NULL;
     25     }
     26 }
     27 void creatbitree(bitree *T)
     28 {
     29     datatype ch;                    /*递归创建二叉树*/
     30     cin>>ch;
     31     if(ch=='#')                        /*表示该处不生成结点*/
     32         *T=NULL;
     33     else
     34     {
     35         *T=new binode;
     36         if(!(*T))
     37             exit(-1);
     38         (*T)->data=ch;
     39         creatbitree(&((*T)->lchild));        /*构造左子树*/
     40         creatbitree(&((*T)->rchild));        /*构造右子树*/
     41     }
     42 }
     43 int insertleftchild(bitree p,bitree c)        /*二叉树的左插入*/
     44 {
     45     if(p)
     46     {
     47         c->rchild=p->lchild;    /*将c子树插入到T中,使得c成为p的做子树*/
     48         p->lchild=c;        /*p的左子树成为c的右子树*/
     49         return 1;
     50     }
     51     return 0;
     52 }
     53 int insertrightchild(bitree p,bitree c)        /*二叉树的右插入*/
     54 {
     55     if(p)
     56     {
     57         c->rchild=c->lchild;
     58         p->rchild=c;
     59         return 1;
     60     }
     61     return 0;
     62 }
     63 bitree point(bitree T,datatype e)            /*查找元素为e的结点的指针*/
     64 {
     65     bitree q[1000];
     66     int front=0,rear=0;                /*头节点不存储元素*/
     67     binode *p;
     68     if(T)
     69     {
     70         q[rear]=T;
     71         rear++;
     72         while(front!=rear)            /*利用队列查找*/
     73         {
     74             p=q[front];
     75             front++;
     76             if(p->data==e)
     77                 return p;
     78             if(p->lchild)
     79                 q[rear++]=p->lchild;
     80             if(p->rchild)
     81                 q[rear++]=p->rchild;
     82         }
     83     }
     84     return NULL;
     85 }
     86 datatype leftchild(bitree T,datatype e)        /*返回二叉树结点左孩子元素值*/
     87 {
     88     bitree p;
     89     if(T)
     90     {
     91         p=point(T,e);
     92         if(p&&p->lchild)
     93             return p->lchild->data;
     94     }
     95     return 0;
     96 }
     97 datatype rightchile(bitree T,datatype e)
     98 {
     99     bitree p;
    100     if(T)
    101     {
    102         p=point(T,e);                /*寻找该节点*/
    103         if(p&&p->rchild)
    104             return p->rchild->data;
    105     }
    106     return 0;
    107 }
    108 int deleteleftchild(bitree p)                /*删除二叉树左子树的操作*/
    109 {
    110     if(p)
    111     {
    112         destroybitree(&(p->lchild));
    113         return 1;
    114     }
    115     return 0;
    116 }
    117 int deleterightchild(bitree p)            /*删除右子树*/
    118 {
    119     if(p)
    120     {
    121         destroybitree(&(p->rchild));
    122         return 1;
    123     }
    124     return 0;
    125 }
    126 int main()
    127 {
    128     bitree T;
    129     initbitree(&T);
    130     creatbitree(&T);
    131 }
  • 相关阅读:
    170322操作系统定义、功能、位置与历史
    java 多线程
    java 网络编程TCP程序设计
    java 事件处理机制
    java GUI编程
    170321php3第4章 PHP5的基本语法+作业九九乘法表
    170320网络编程 udpclient udpGroupClient
    二叉树线索化
    哈希表
    二叉搜索树
  • 原文地址:https://www.cnblogs.com/a1225234/p/4688547.html
Copyright © 2011-2022 走看看