Tree树——insertNode()

通过queue 队列来进行 insert 操作,判断 tree 的各个节点是否存在 left 和 right 为NULL的情况,如果有就将 新的 叶子插入。这里要循环遍历树,通过 queue 来进行判断,如果root(根),不为空,将其enqueue(),然后看代码吧

 

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 
  4 struct tree
  5 {
  6     int data;
  7     struct tree * left;
  8     struct tree * right;
  9 };
 10 struct queue
 11 {
 12     int rear, front, size;
 13     unsigned capacity;
 14     struct tree ** array;
 15 };
 16 struct queue * creatQueue(int capacity)
 17 {
 18     struct queue * q = (struct queue *)malloc(sizeof(struct queue));
 19     q->capacity = capacity;
 20     q->rear = capacity-1;
 21     q->front = 0;
 22     q->size = 0;
 23     q->array = (struct tree *)malloc(capacity * sizeof(struct tree));
 24 
 25     return q;
 26 }
 27 int isFull(struct queue * q)
 28 {
 29     return q->size == q->capacity ? 1 : 0;
 30 }
 31 int isEmpty(struct queue * q)
 32 {
 33     return 0 == q->size ? 1 : 0;
 34 }
 35 void enQueue(struct queue * q, struct tree * node)
 36 {
 37     if(isFull(q))
 38     {
 39         printf("\nFull");
 40         return ;
 41     }
 42     else
 43     {
 44         q->rear = (q->rear+1) % q->capacity;
 45         q->array[q->rear] = node;
 46         q->size += 1;
 47     }
 48 }
 49 struct tree * deQueue(struct queue * q)
 50 {
 51     struct tree * node;
 52 
 53     if(isEmpty(q))
 54     {
 55         node = NULL;
 56         return node;
 57     }
 58     else
 59     {
 60         node = q->array[q->front];
 61         q->front = (q->front+1) % q->capacity;
 62         q->size -= 1;
 63         return node;
 64     }
 65 }
 66 struct tree * newNode(int data)
 67 {
 68     struct tree * root = (struct tree *)malloc(sizeof(struct tree));
 69     root->data = data;
 70     root->left = NULL;
 71     root->right = NULL;
 72 
 73     return root;
 74 }
 75 void printLevelOrder(struct tree * root)
 76 {
 77     struct queue * q = creatQueue(20);
 78     struct tree * temp = root;
 79 
 80     while(NULL != temp)
 81     {
 82         printf("%d  ", temp->data);
 83 
 84         if(temp->left)
 85         {
 86             enQueue(q, temp->left);
 87         }
 88         if(temp->right)
 89         {
 90             enQueue(q, temp->right);
 91         }
 92 
 93         temp = deQueue(q);
 94     }
 95 }
 96 void insertTree(struct tree * root, int data)
 97 {
 98     struct queue * q = creatQueue(20);
 99     enQueue(q, root);
100     while(1)
101     {
102         struct tree * temp = deQueue(q);
103 
104         if(NULL == temp->left)
105         {
106             temp->left = newNode(data);
107             break;
108         }
109         else
110         {
111             enQueue(q, temp->left);
112         }
113         if(NULL == temp->right)
114         {
115             temp->right = newNode(data);
116             break;
117         }
118         else
119         {
120             enQueue(q, temp->right);
121         }
122     }
123 }
124 int main(void)
125 {
126     struct tree * root = newNode(1);
127     root->left = newNode(2);
128     root->right = newNode(3);
129     root->right->left = newNode(4);
130     root->right->right = newNode(5);
131 
132     printLevelOrder(root);
133     insertTree(root, 6);
134     printf("\n");
135     printLevelOrder(root);
136     return 0;
137 }

 

转载于:https://www.cnblogs.com/AI-Cobe/p/9359167.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值