【资料结构】二元搜寻树:添加节点

说明

二元搜寻树:在节点的两个分支中,比较节点大小并存入左右
图1

程序码

#include <stdio.h>
#include <stdlib.h>
typedef struct tree *tree_p;
struct tree {
  int data;
  tree_p left;
  tree_p right;
  tree_p back;
} tree;
tree_p root = NULL, ptr, cur;
tree_p add_node(int num);
void inorder(tree_p root);
void creat(int num);
void basic1();

主程序

int main() {
  basic1();
  inorder(root);
  printf("\n------------执行完成------------\n");
  creat(6);
  printf("\n------------添加节点------------\n");
  inorder(root);
  printf("\n------------执行完成------------\n");
}

函式

void basic1():基本测资

void basic1() {
  creat(4);
  creat(2);
  creat(9);
  creat(1);
  creat(3);
  creat(7);
  creat(5);
  creat(8);
}

void creat(int num):插入节点

进入回圈判断,利用回圈判定大小,不断向左右节点移动,当下一个节点为空白时,跳出回圈,并在下一个节点新增。
void creat(int num) {
  ptr = root;
  cur = root;
  if (root == NULL) {
    root = add_node(num);
  } else {
    while (ptr != NULL) {
      cur = ptr;
      if (ptr->data < num) {
        ptr = ptr->right;
      } else if (ptr->data > num) {
        ptr = ptr->left;
      } else {
        printf("same");
      }
    }
    //cur会一直跟在ptr的後一格
    //在存入节点时,判断大小选择左右
    if (cur->data < num) {
      cur->right = add_node(num);
      cur->right->back = cur;
      //顺便新增back节点指向该节点的前一个位置
    } else {
      cur->left = add_node(num);
      cur->left->back = cur;
    }
  }
}

结果

图2

(中序输出)


<<:  就控制目标(control objectives)而言,那一个是无效的实体控制(the least effective physical control )?

>>:  【资料结构】堆积树(阵列法) 未完成

[Day 10] - Spring Boot 实作登入验证(四)(JWT登入验证)

今天就来完成登入验证的部分! 昨天已经完成发送帐号密码到api,验证ok即发送一笔JWT给clien...

[Day-20] R语言 - 分群应用(二) 离群值侦测 - 上 ( detect outlier by clustering in R.Studio )

您的订阅是我制作影片的动力 订阅点这里~ 影片程序码 ## 应用二: 离群侦测(数值) #### d...

Day 16 - WooCommerce 金流串接 - 前言

铁人赛到今天刚好过了一半,没有特别规划看到那写到那里,但就是很刚好地花了 10 天的篇幅介绍永丰金流...

Day 20 - 规划各功能模组的介面

紧接着今天我们要来规划各个功能模组的介面了! 首先是登入後的首页,会陈列使用者上传记帐资讯,包含图片...

疫情学习用电脑麦克风

为什麽会议,大家听不到我声音,却能听到我的音乐啊~~~~ 设来设去...到底怎麽回事啊... 答案是...