• 二叉树


    二叉树节点

    // 树节点
    struct binary_tree
    {
      int data; // 数据
      struct binary_tree *left; // 左叶子节点
      struct binary_tree *right; // 右叶子节点
    };
    
    typedef struct binary_tree node;
    

    插入节点

    void insert(node ** tree, int val)
    {
      node *temp = NULL;
    
      // 判断树节点是否为null,为null时生成节点插入到树中
      if (NULL == (*tree))
      {
        temp = (node*)malloc(sizeof(node));
        temp->left = NULL;
        temp->right = NULL;
        temp->data = val;
        (*tree) = temp;
        return;
      }
    
      // 已经存在的树节点,需要往左右子节点插入
      if (val < (*tree)->data)
      {
        // 小于当前节点插入左边
        insert(&(*tree)->left, val);
      }else if (val > (*tree)->data)
      {
        //  大于当前节点插入到右边
        insert(&(*tree)->right, val);
      }
    }
    

    删除节点

    void deltree(node *tree)
    {
      if (NULL != tree)
      {
        if (NULL != tree->left)
        {
          deltree(tree->left);
        }
    
        if (NULL != tree->right)
        {
          deltree(tree->right);
        }
    
        free(tree);
      }
    }
    

    二叉树遍历

    前序遍历

    // 前序遍历,先输出data,再输出左右节点
    void print_preorder(node *tree)
    {
      if (NULL != tree)
      {
        printf("%d 
    ", tree->data);
        print_preorder(tree->left);
        print_preorder(tree->right);
      }
    }
    

    中序遍历

    // 中序遍历,先输出左节点,再输出data,最后输出右节点
    void print_inorder(node *tree)
    {
      if (NULL != tree)
      {
        print_inorder(tree->left);
        printf("%d 
    ", tree->data);
        print_inorder(tree->right);
      }
    }
    

    后序遍历

    // 后序遍历,先输出左右节点,在输出data
    void print_postorder(node *tree)
    {
      if (NULL != tree)
      {
        print_postorder(tree->left);
        print_postorder(tree->right);
        printf("%d 
    ", tree->data);
      }
    }
    

    代码

    #include <stdio.h>
    #include <stdlib.h>
    
    struct binary_tree
    {
      int data;
      struct binary_tree *left;
      struct binary_tree *right;
    };
    
    typedef struct binary_tree node;
    
    void insert(node ** tree, int val)
    {
      node *temp = NULL;
    
      // 判断树节点是否为null,为null时生成节点插入到树中
      if (NULL == (*tree))
      {
        temp = (node*)malloc(sizeof(node));
        temp->left = NULL;
        temp->right = NULL;
        temp->data = val;
        (*tree) = temp;
        return;
      }
    
      // 已经存在的树节点,需要往左右子节点插入
      if (val < (*tree)->data)
      {
        // 小于当前节点插入左边
        insert(&(*tree)->left, val);
      }else if (val > (*tree)->data)
      {
        //  大于当前节点插入到右边
        insert(&(*tree)->right, val);
      }
    }
    
    void deltree(node *tree)
    {
      if (NULL != tree)
      {
        if (NULL != tree->left)
        {
          deltree(tree->left);
        }
    
        if (NULL != tree->right)
        {
          deltree(tree->right);
        }
    
        free(tree);
      }
    }
    
    // 前序遍历,先输出data,再输出左右节点
    void print_preorder(node *tree)
    {
      if (NULL != tree)
      {
        printf("%d 
    ", tree->data);
        print_preorder(tree->left);
        print_preorder(tree->right);
      }
    }
    
    // 中序遍历,先输出左节点,再输出data,最后输出右节点
    void print_inorder(node *tree)
    {
      if (NULL != tree)
      {
        print_inorder(tree->left);
        printf("%d 
    ", tree->data);
        print_inorder(tree->right);
      }
    }
    
    // 后序遍历,先输出左右节点,在输出data
    void print_postorder(node *tree)
    {
      if (NULL != tree)
      {
        print_postorder(tree->left);
        print_postorder(tree->right);
        printf("%d 
    ", tree->data);
      }
    }
    
    int main(void)
    {
      node *root = NULL;
    
      insert(&root, 9);
      insert(&root, 4);
      insert(&root, 15);
      insert(&root, 2);
      insert(&root, 6);
      insert(&root, 12);
      insert(&root, 17);
    
      print_preorder(root);
    
      getchar();
    
      deltree(root);
      return 0;
    }
    
    

    参考:https://www.cnblogs.com/landpack/p/4783120.html

  • 相关阅读:
    npm run eslint 报错 (87 errors, 0 warnings potentially fixable with the --fix option.)
    vue 项目 webstrom IDE格式化代码规则遵循eslint设置
    VUE:Method definition shorthands are not supported by current JavaScript version解决办法(该方法定义的缺陷是不支持当前的JavaScript版本)
    Flex 布局全解
    前端解析ipa、apk安装包信息 —— app-info-parser
    微信小程序开发
    base64上传到oss
    jQuery 文档操作方法
    学习v-on的使用
    学习vue结合ajax查询出后台数据
  • 原文地址:https://www.cnblogs.com/xiongyungang/p/12894734.html
Copyright © 2020-2023  润新知